Utilise le CLI de Cursor dans des scripts et des workflows d’automatisation pour l’analyse, la génération et la refactorisation de code.

Fonctionnement

Utilise le mode impression (-p, --print) pour les scripts non interactifs et l’automatisation.

Modification de fichiers dans les scripts

Combine --print avec --force pour modifier des fichiers dans des scripts :
# Autoriser les modifications de fichiers en mode impression
cursor-agent -p --force "Refactor this code to use modern ES6+ syntax"

# Sans --force, les changements sont uniquement proposés, pas appliqués
cursor-agent -p "Add JSDoc comments to this file"  # Ne modifiera pas les fichiers

# Traitement par lots avec modifications effectives des fichiers
find src/ -name "*.js" | while read file; do
  cursor-agent -p --force "Add comprehensive JSDoc comments to $file"
done
L’option --force permet à l’agent d’effectuer des modifications directes des fichiers sans confirmation

Configuration

Consulte Installation et Authentification pour tous les détails de configuration.
# Installer Cursor CLI
curl https://cursor.com/install -fsS | bash

# Définir la clé d’API pour les scripts
export CURSOR_API_KEY=your_api_key_here
cursor-agent -p "Analyze this code"

Exemples de scripts

Utilise différents formats de sortie selon les besoins du script. Consulte la page Format de sortie pour plus de détails.

Recherche dans le code

Utilise --output-format text pour des réponses lisibles :
#!/bin/bash
# Question simple sur la base de code

cursor-agent -p --output-format text "What does this codebase do?"

Revue de code automatisée

Utilise --output-format json pour une analyse structurée :
#!/bin/bash
# simple-code-review.sh - Script de revue de code basique

echo "Starting code review..."

# Examiner les changements récents
cursor-agent -p --force --output-format text \
  "Review the recent code changes and provide feedback on:
  - Code quality and readability  
  - Potential bugs or issues
  - Security considerations
  - Best practices compliance

  Provide specific suggestions for improvement and write to review.txt"

if [ $? -eq 0 ]; then
  echo "✅ Code review completed successfully"
else
  echo "❌ Code review failed"
  exit 1
fi

Suivi de la progression en temps réel

Utilise --output-format stream-json pour un suivi en temps réel :
#!/bin/bash
# stream-progress.sh - Suivre la progression en temps réel

echo "🚀 Starting stream processing..."

# Suivre la progression en temps réel
accumulated_text=""
tool_count=0
start_time=$(date +%s)

cursor-agent -p --force --output-format stream-json \
  "Analyze this project structure and create a summary report in analysis.txt" | \
  while IFS= read -r line; do
    
    type=$(echo "$line" | jq -r '.type // empty')
    subtype=$(echo "$line" | jq -r '.subtype // empty')
    
    case "$type" in
      "system")
        if [ "$subtype" = "init" ]; then
          model=$(echo "$line" | jq -r '.model // "unknown"')
          echo "🤖 Using model: $model"
        fi
        ;;
        
      "assistant")
        # Accumuler les deltas de texte en streaming
        content=$(echo "$line" | jq -r '.message.content[0].text // empty')
        accumulated_text="$accumulated_text$content"
        
        # Afficher la progression en direct
        printf "\r📝 Generating: %d chars" ${#accumulated_text}
        ;;
        
      "tool_call")
        if [ "$subtype" = "started" ]; then
          tool_count=$((tool_count + 1))
          
          # Extraire les informations de l’outil
          if echo "$line" | jq -e '.tool_call.writeToolCall' > /dev/null 2>&1; then
            path=$(echo "$line" | jq -r '.tool_call.writeToolCall.args.path // "unknown"')
            echo -e "\n🔧 Tool #$tool_count: Creating $path"
          elif echo "$line" | jq -e '.tool_call.readToolCall' > /dev/null 2>&1; then
            path=$(echo "$line" | jq -r '.tool_call.readToolCall.args.path // "unknown"')
            echo -e "\n📖 Tool #$tool_count: Reading $path"
          fi
          
        elif [ "$subtype" = "completed" ]; then
          # Extraire et afficher les résultats de l’outil
          if echo "$line" | jq -e '.tool_call.writeToolCall.result.success' > /dev/null 2>&1; then
            lines=$(echo "$line" | jq -r '.tool_call.writeToolCall.result.success.linesCreated // 0')
            size=$(echo "$line" | jq -r '.tool_call.writeToolCall.result.success.fileSize // 0')
            echo "   ✅ Created $lines lines ($size bytes)"
          elif echo "$line" | jq -e '.tool_call.readToolCall.result.success' > /dev/null 2>&1; then
            lines=$(echo "$line" | jq -r '.tool_call.readToolCall.result.success.totalLines // 0')
            echo "   ✅ Read $lines lines"
          fi
        fi
        ;;
        
      "result")
        duration=$(echo "$line" | jq -r '.duration_ms // 0')
        end_time=$(date +%s)
        total_time=$((end_time - start_time))
        
        echo -e "\n\n🎯 Completed in ${duration}ms (${total_time}s total)"
        echo "📊 Final stats: $tool_count tools, ${#accumulated_text} chars generated"
        ;;
    esac
  done