Passer au contenu principal
Utilise Cursor CLI dans des scripts et des workflows d’automatisation pour des tâches d’analyse de code, de génération et de refactorisation.

Comment ça marche

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

Modification de fichiers dans des 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 modifications sont proposées mais non appliquées
cursor-agent -p "Ajouter des commentaires JSDoc à ce fichier"  # Ne modifiera pas les fichiers

# Traitement par lots avec modifications réelles des fichiers
find src/ -name "*.js" | while read file; do
  cursor-agent -p --force "Ajouter des commentaires JSDoc détaillés à $file"
done
L’option --force permet à l’agent d’apporter des modifications directes aux fichiers sans confirmation

Configuration

Consulte Installation et Authentification pour tous les détails de configuration.
# Installer l’interface en ligne de commande (CLI) de Cursor
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 "Analyse ce code"

Exemples de scripts

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

Recherche dans la base de code

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

cursor-agent -p --output-format text "À quoi sert ce codebase ?"

Revue de code automatisée

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

echo "Début de la revue de code..."

# Examiner les changements récents
cursor-agent -p --force --output-format text \
  "Passe en revue les derniers changements de code et donne un retour sur :
  - Qualité du code et lisibilité  
  - Bugs ou problèmes potentiels
  - Aspects de sécurité
  - Conformité aux bonnes pratiques

  Donne des suggestions d’amélioration concrètes et écris-les dans review.txt"

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

Suivi de la progression en temps réel

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

echo "🚀 Démarrage du traitement du stream..."

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

cursor-agent -p --force --output-format stream-json \
  "Analyse la structure de ce 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 "🤖 Modèle utilisé : $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 temps réel
        printf "\r📝 Génération : %d caractères" ${#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🔧 Outil n°$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 n°$tool_count : Lecture de $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 "   ✅ Création de $lines lignes ($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 "   ✅ Lecture de $lines lignes"
          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
I