Files
2025-11-29 18:50:29 +08:00

7.3 KiB

/pm init

Initialize CCPM (Claude Code Project Management) in the current project.

This command sets up the necessary directory structure, configuration files, and Git integration for CCPM to work properly.


🚀 Initializing CCPM in project...

1. Creating project structure

mkdir -p ccpm specs worktrees

Created directory structure

2. Setting up configuration

if [ ! -f "ccpm.config.json" ]; then
  cat > ccpm.config.json << 'EOF'
{
  "project": {
    "name": "$(basename $(pwd))",
    "description": "CCPM managed project",
    "repository": {
      "url": "$(git config --get remote.origin.url 2>/dev/null || echo '')",
      "defaultBranch": "main"
    }
  },
  "directories": {
    "ccpm": "ccpm",
    "specs": "specs",
    "worktrees": "worktrees"
  },
  "github": {
    "enabled": true,
    "issueLabels": [
      "epic",
      "feature",
      "bug",
      "enhancement",
      "documentation",
      "testing",
      "infrastructure"
    ],
    "priorities": ["low", "medium", "high", "critical"],
    "statuses": ["backlog", "in-progress", "review", "done"]
  },
  "workflow": {
    "branchNaming": {
      "epic": "epic/{name}",
      "feature": "feature/{name}",
      "bugfix": "bugfix/{name}",
      "hotfix": "hotfix/{name}"
    },
    "autoAssignIssues": true,
    "requireReviewForMerge": true
  },
  "ai": {
    "maxConcurrentAgents": 3,
    "defaultAgentModel": "sonnet-4-5",
    "timeoutMinutes": 30
  },
  "created": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
  "lastUpdated": "$(date -u +%Y-%m-%dT%H:%M:%SZ)"
}
EOF
  echo "✅ Created ccpm.config.json"
else
  echo "✅ ccpm.config.json already exists"
fi
if [ ! -f "ccpm/state.json" ]; then
  cat > ccpm/state.json << 'EOF'
{
  "project": {
    "status": "initialized",
    "currentEpic": null,
    "activeIssues": [],
    "activeWorktrees": []
  },
  "prs": {
    "active": [],
    "draft": [],
    "completed": []
  },
  "agents": {
    "running": [],
    "completed": []
  },
  "github": {
    "lastSync": null,
    "syncEnabled": true
  },
  "stats": {
    "totalEpics": 0,
    "completedEpics": 0,
    "totalIssues": 0,
    "completedIssues": 0
  },
  "initializedAt": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
  "lastActivity": "$(date -u +%Y-%m-%dT%H:%M:%SZ)"
}
EOF
  echo "✅ Created ccpm/state.json"
else
  echo "✅ ccpm/state.json already exists"
fi
if [ ! -f "ccpm/github.json" ]; then
  # Check if GitHub CLI is available and authenticated
  if command -v gh >/dev/null 2>&1 && gh auth status >/dev/null 2>&1; then
    GITHUB_USER=$(gh api user --jq '.login')
    REPO_URL=$(git config --get remote.origin.url 2>/dev/null || echo '')

    cat > ccpm/github.json << EOF
{
  "repository": {
    "owner": "$(echo $REPO_URL | sed -n 's/.*github.com[:/]\([^/]*\)\/.*/\1/p' || echo '$GITHUB_USER')",
    "name": "$(basename $(git rev-parse --show-toplevel 2>/dev/null || echo $(pwd)))",
    "url": "$REPO_URL",
    "defaultBranch": "main",
    "isPrivate": false
  },
  "authentication": {
    "cliInstalled": true,
    "authenticated": true,
    "user": "$GITHUB_USER",
    "tokenScopes": ["gist", "read:org", "repo"]
  },
  "integration": {
    "enabled": true,
    "autoSync": true,
    "createIssuesFromPRD": true,
    "linkIssuesToCommits": true
  },
  "labels": {
    "epic": {
      "name": "epic",
      "color": "FF6B6B",
      "description": "Large feature that spans multiple issues"
    },
    "feature": {
      "name": "feature",
      "color": "0079BF",
      "description": "New functionality or feature"
    },
    "bug": {
      "name": "bug",
      "color": "E11D21",
      "description": "Something isn't working"
    },
    "enhancement": {
      "name": "enhancement",
      "color": "84B6EB",
      "description": "Improvement to existing functionality"
    },
    "documentation": {
      "name": "documentation",
      "color": "FCE74C",
      "description": "Improvements to documentation"
    },
    "testing": {
      "name": "testing",
      "color": "5319E7",
      "description": "Test coverage and testing improvements"
    },
    "infrastructure": {
      "name": "infrastructure",
      "color": "6CC644",
      "description": "Infrastructure and deployment improvements"
    }
  },
  "lastSync": null,
  "configuredAt": "$(date -u +%Y-%m-%dT%H:%M:%SZ)"
}
EOF
    echo "✅ Created ccpm/github.json with GitHub integration"
  else
    echo "⚠️  GitHub CLI not available - creating basic GitHub config"
    cat > ccpm/github.json << 'EOF'
{
  "repository": {
    "owner": "",
    "name": "$(basename $(pwd))",
    "url": "",
    "defaultBranch": "main",
    "isPrivate": false
  },
  "authentication": {
    "cliInstalled": false,
    "authenticated": false
  },
  "integration": {
    "enabled": false,
    "autoSync": false
  },
  "configuredAt": "$(date -u +%Y-%m-%dT%H:%M:%SZ)"
}
EOF
    echo "✅ Created basic ccpm/github.json"
  fi
else
  echo "✅ ccpm/github.json already exists"
fi

3. Setting up documentation

if [ ! -f "specs/README.md" ]; then
  cat > specs/README.md << 'EOF'
# CCPM Specs Directory

This directory contains Product Requirements Documents (PRDs) and technical specifications for the project.

## Structure

- `prds/` - Product Requirements Documents
- `technical/` - Technical specifications
- `templates/` - Document templates

## Creating New PRDs

Use the CCPM command to create new PRDs:
\`\`\`bash
/pm prd-new
\`\`\`

## PRD Format

PRDs should follow the standard format:
- Executive Summary
- Problem Statement
- Success Metrics
- User Stories
- Technical Requirements
- Acceptance Criteria
EOF
  echo "✅ Created specs/README.md"
else
  echo "✅ specs/README.md already exists"
fi

4. Validating installation

echo "🔍 Validating installation..."

# Check if all files were created successfully
if [ -f "ccpm.config.json" ] && python3 -m json.tool ccpm.config.json >/dev/null 2>&1; then
  echo "✅ ccpm.config.json is valid JSON"
else
  echo "❌ ccpm.config.json is missing or invalid"
fi

if [ -f "ccpm/state.json" ] && python3 -m json.tool ccpm/state.json >/dev/null 2>&1; then
  echo "✅ state.json is valid JSON"
else
  echo "❌ state.json is missing or invalid"
fi

if [ -f "ccpm/github.json" ] && python3 -m json.tool ccpm/github.json >/dev/null 2>&1; then
  echo "✅ github.json is valid JSON"
else
  echo "❌ github.json is missing or invalid"
fi

# Check directories
for dir in ccpm specs worktrees; do
  if [ -d "$dir" ]; then
    echo "✅ Directory $dir/ exists"
  else
    echo "❌ Directory $dir/ missing"
  fi
done

📊 Project initialized successfully!

Created project structure

  • ccpm/ - Local CCPM configuration and state
  • specs/ - Directory for PRDs and specifications
  • worktrees/ - Directory for Git worktrees

Generated configuration files

  • ccpm.config.json - Main project configuration
  • ccpm/github.json - GitHub integration settings
  • ccpm/state.json - Current project state tracking

Set up GitHub integration

  • Repository detection and configuration
  • GitHub CLI authentication check
  • Issue labels and workflows

🎯 Next steps:

/pm prd-new    # Create your first PRD
/pm status     # Check project status
/pm help       # See all available commands