Smithery Logo
MCPsSkillsDocsPricing
Login
Smithery Logo

Accelerating the Agent Economy

Resources

DocumentationPrivacy PolicySystem Status

Company

PricingAboutBlog

Connect

© 2026 Smithery. All rights reserved.

    BerryKuipers

    create-feature-branch

    BerryKuipers/create-feature-branch
    Coding
    5
    2 installs

    About

    SKILL.md

    Install

    Install via Skills CLI

    or add to your agent
    • Claude Code
      Claude Code
    • Codex
      Codex
    • OpenClaw
      OpenClaw
    • Cursor
      Cursor
    • Amp
      Amp
    • GitHub Copilot
      GitHub Copilot
    • Gemini CLI
      Gemini CLI
    • Kilo Code
      Kilo Code
    • Junie
      Junie
    • Replit
      Replit
    • Windsurf
      Windsurf
    • Cline
      Cline
    • Continue
      Continue
    • OpenCode
      OpenCode
    • OpenHands
      OpenHands
    • Roo Code
      Roo Code
    • Augment
      Augment
    • Goose
      Goose
    • Trae
      Trae
    • Zencoder
      Zencoder
    • Antigravity
      Antigravity
    ├─
    ├─
    └─

    About

    Create properly named feature branch from development with remote tracking, following WescoBar naming conventions and git best practices

    SKILL.md

    Create Feature Branch

    Purpose

    Create a feature branch with proper naming convention, sync with remote development branch, and set up remote tracking for WescoBar workflows.

    When to Use

    • Conductor workflow Phase 2, Step 1 (Branch Setup)
    • Before starting implementation of new feature
    • When picking up GitHub issue
    • As first step in feature development workflow

    Naming Convention

    feature/issue-<NUMBER>-<short-description>
    

    Examples:

    • feature/issue-137-dark-mode
    • feature/issue-42-character-portraits
    • feature/issue-89-gemini-caching

    Rules:

    • Always start with feature/
    • Include issue-<NUMBER> for GitHub issue linking
    • Use kebab-case for description
    • Keep description under 40 characters
    • Use descriptive but concise naming

    Instructions

    Step 1: Validate Inputs

    ISSUE_NUMBER=$1
    ISSUE_TITLE=$2  # Optional: for auto-generating description
    
    if [ -z "$ISSUE_NUMBER" ]; then
      echo "❌ Error: Issue number required"
      exit 1
    fi
    
    # Validate issue number is numeric
    if ! [[ "$ISSUE_NUMBER" =~ ^[0-9]+$ ]]; then
      echo "❌ Error: Issue number must be numeric"
      exit 1
    fi
    

    Step 2: Generate Branch Name

    # Generate short description from issue title if provided
    if [ -n "$ISSUE_TITLE" ]; then
      # Convert to lowercase, replace spaces with hyphens, remove special chars
      SHORT_DESC=$(echo "$ISSUE_TITLE" | \
        tr '[:upper:]' '[:lower:]' | \
        sed 's/[^a-z0-9 ]//g' | \
        tr -s ' ' '-' | \
        cut -d'-' -f1-5)  # Keep first 5 words max
    else
      # Manual description required
      echo "Enter short description (kebab-case):"
      read SHORT_DESC
    fi
    
    BRANCH_NAME="feature/issue-${ISSUE_NUMBER}-${SHORT_DESC}"
    
    echo "Branch name: $BRANCH_NAME"
    

    Step 3: Check if Branch Already Exists

    # Check local branches
    if git rev-parse --verify "$BRANCH_NAME" 2>/dev/null; then
      echo "⚠️ Branch already exists locally: $BRANCH_NAME"
      echo "Options:"
      echo "  1. Checkout existing branch"
      echo "  2. Create new branch with different name"
      echo "  3. Delete and recreate"
    
      read -p "Choose (1/2/3): " CHOICE
    
      case $CHOICE in
        1)
          git checkout "$BRANCH_NAME"
          echo "✅ Checked out existing branch"
          exit 0
          ;;
        2)
          echo "Enter new description:"
          read NEW_DESC
          BRANCH_NAME="feature/issue-${ISSUE_NUMBER}-${NEW_DESC}"
          ;;
        3)
          git branch -D "$BRANCH_NAME"
          echo "Deleted existing branch - will recreate"
          ;;
      esac
    fi
    
    # Check remote branches
    if git ls-remote --heads origin "$BRANCH_NAME" | grep -q "$BRANCH_NAME"; then
      echo "⚠️ Branch exists on remote: $BRANCH_NAME"
      echo "Fetching remote branch..."
      git fetch origin "$BRANCH_NAME"
      git checkout --track "origin/$BRANCH_NAME"
      echo "✅ Checked out remote branch"
      exit 0
    fi
    

    Step 4: Sync with Development

    echo "→ Syncing with development branch..."
    
    # Checkout development
    git checkout development
    
    # Pull latest changes
    if ! git pull origin development; then
      echo "❌ Error: Failed to pull latest development"
      echo "Resolve conflicts and try again"
      exit 1
    fi
    
    echo "✅ Development branch up to date"
    

    Step 5: Create Feature Branch

    echo "→ Creating feature branch: $BRANCH_NAME"
    
    # Create and checkout new branch
    if ! git checkout -b "$BRANCH_NAME"; then
      echo "❌ Error: Failed to create branch"
      exit 1
    fi
    
    echo "✅ Feature branch created"
    

    Step 6: Push to Remote with Tracking

    echo "→ Pushing to remote with tracking..."
    
    # Push with upstream tracking
    if ! git push -u origin "$BRANCH_NAME"; then
      echo "❌ Error: Failed to push to remote"
      echo "Branch created locally but not on remote"
      exit 1
    fi
    
    echo "✅ Branch pushed to remote with tracking"
    

    Step 7: Verify Setup

    # Verify current branch
    CURRENT_BRANCH=$(git branch --show-current)
    
    if [ "$CURRENT_BRANCH" = "$BRANCH_NAME" ]; then
      echo ""
      echo "✅ Feature Branch Setup Complete"
      echo "   Branch: $BRANCH_NAME"
      echo "   Tracking: origin/$BRANCH_NAME"
      echo "   Base: development"
      echo ""
      echo "Ready for implementation!"
    else
      echo "⚠️ Warning: Not on expected branch"
      echo "   Expected: $BRANCH_NAME"
      echo "   Actual: $CURRENT_BRANCH"
    fi
    

    Output Format

    Success

    {
      "status": "success",
      "branch": {
        "name": "feature/issue-137-dark-mode",
        "issue": 137,
        "base": "development",
        "remote": "origin/feature/issue-137-dark-mode",
        "tracking": true
      },
      "message": "Feature branch created and pushed to remote"
    }
    

    Branch Already Exists

    {
      "status": "success",
      "branch": {
        "name": "feature/issue-137-dark-mode",
        "existed": true,
        "action": "checked_out"
      },
      "message": "Existing branch checked out"
    }
    

    Integration with Conductor

    Used in conductor Phase 2, Step 1:

    ### Phase 2: Branch Setup and Implementation
    
    **Step 1: Create Feature Branch**
    
    **RESUMPTION CHECK**: If feature branch already exists, SKIP this step.
    
    Use `create-feature-branch` skill:
    - Input: issue_number, issue_title (from Phase 1)
    - Output: branch_name, tracking status
    
    Expected result:
    - Branch created: `feature/issue-137-dark-mode`
    - Checked out and ready
    - Remote tracking set up
    - Base: development (latest)
    
    Record branch name for PR creation in Phase 4.
    

    Error Handling

    Development Branch Pull Fails

    if ! git pull origin development; then
      echo "❌ Merge conflicts in development branch"
      echo "Action required:"
      echo "  1. Resolve conflicts manually"
      echo "  2. Run: git merge --continue"
      echo "  3. Re-run create-feature-branch"
      exit 1
    fi
    

    Remote Push Fails (Network)

    # Retry with exponential backoff (from CLAUDE.md)
    for i in {1..4}; do
      if git push -u origin "$BRANCH_NAME"; then
        break
      else
        if [ $i -lt 4 ]; then
          DELAY=$((2 ** i))
          echo "⏳ Push failed, retrying in ${DELAY}s..."
          sleep $DELAY
        else
          echo "❌ Push failed after 4 attempts"
          exit 1
        fi
      fi
    done
    

    Branch Name Too Long

    if [ ${#BRANCH_NAME} -gt 80 ]; then
      echo "⚠️ Branch name too long: ${#BRANCH_NAME} characters"
      echo "Truncating description..."
      SHORT_DESC=$(echo "$SHORT_DESC" | cut -c1-40)
      BRANCH_NAME="feature/issue-${ISSUE_NUMBER}-${SHORT_DESC}"
    fi
    

    Related Skills

    • check-resume-branch - Check if branch exists for resumption
    • push-with-retry - Retry logic for network failures
    • commit-with-validation - Atomic commit before PR

    Best Practices

    1. Always sync development first - Ensures latest base
    2. Use descriptive names - But keep under 80 chars
    3. Set up remote tracking - Enables git push without args
    4. Verify branch created - Check git branch --show-current
    5. Handle existing branches - Don't overwrite without confirmation
    6. Retry on network failures - Use exponential backoff

    Notes

    • Branch naming follows WescoBar convention
    • Remote tracking simplifies push workflow
    • Development is the base branch (not main/master)
    • Branch name includes issue number for PR auto-linking
    • Supports resumption by checking for existing branches
    Recommended Servers
    Gitlab
    Gitlab
    GitHub
    GitHub
    Bitbucket
    Bitbucket
    Repository
    berrykuipers/claude-code-toolkit
    Files