Utilise Cursor CLI dans tes scripts et workflows d’automatisation pour l’analyse de code, la génération et les tâches de refactoring.

Comment ça fonctionne

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 les fichiers dans les scripts :
# Active les modifications de fichiers en mode impression
cursor-agent -p --force "Refactorise ce code pour utiliser la syntaxe ES6+ moderne"

# Sans --force, les changements sont seulement proposés, pas appliqués
cursor-agent -p "Ajoute des commentaires JSDoc à ce fichier"  # Ne modifiera pas les fichiers

# Traitement par lots avec des changements de fichiers réels
find src/ -name "*.js" | while read file; do
  cursor-agent -p --force "Ajoute des commentaires JSDoc complets à $file"
done
Le flag --force permet à l’agent d’effectuer des changements directs sur les 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é 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 de tes scripts. Consulte Format de sortie pour plus de détails.

Recherche dans le code source

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

cursor-agent -p --output-format text "Que fait ce code source ?"

Révision de code automatisée

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

echo "Démarrage de la révision de code..."

# Révision des changements récents
cursor-agent -p --force --output-format text \
  "Révise les changements de code récents et fournis des commentaires sur :
  - La qualité et la lisibilité du code  
  - Les bugs potentiels ou problèmes
  - Les considérations de sécurité
  - La conformité aux bonnes pratiques

  Fournis des suggestions spécifiques d'amélioration et écris dans review.txt"

if [ $? -eq 0 ]; then
  echo "✅ Révision de code terminée avec succès"
else
  echo "❌ Échec de la révision de code"
  exit 1
fi

Suivi de progression en temps réel

Utilise --output-format stream-json pour le suivi de progression en temps réel :
#!/bin/bash
# stream-progress.sh - Suivi de progression en temps réel

echo "🚀 Démarrage du traitement en streaming..."

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

cursor-agent -p --force --output-format stream-json \
  "Analyse cette structure de projet et crée un rapport de synthèse dans 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 "🤖 Utilisation du modèle : $model"
        fi
        ;;
        
      "assistant")
        # Accumule les deltas de texte en streaming
        content=$(echo "$line" | jq -r '.message.content[0].text // empty')
        accumulated_text="$accumulated_text$content"
        
        # Affiche la progression en direct
        printf "\r📝 Génération : %d caractères" ${#accumulated_text}
        ;;
        
      "tool_call")
        if [ "$subtype" = "started" ]; then
          tool_count=$((tool_count + 1))
          
          # Extrait 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🔧 Outil #$tool_count : Création de $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📖 Outil #$tool_count : Lecture de $path"
          fi
          
        elif [ "$subtype" = "completed" ]; then
          # Extrait et affiche 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 "   ✅ $lines lignes créées ($size octets)"
          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 "   ✅ $lines lignes lues"
          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🎯 Terminé en ${duration}ms (${total_time}s au total)"
        echo "📊 Statistiques finales : $tool_count outils, ${#accumulated_text} caractères générés"
        ;;
    esac
  done