Utiliser la CLI en mode headless
Utilisez la CLI de Cursor dans des scripts et des flux d’automatisation pour analyser, générer et refactoriser du code.
Fonctionnement
Utilisez le mode d’impression (-p, --print) pour les scripts et l’automatisation en mode non interactif.
Modification de fichiers via des scripts
Combinez --print avec --force (ou --yolo) pour modifier des fichiers via des scripts :
# Activer la modification des fichiers en mode d’impressionagent -p --force "Refactor this code to use modern ES6+ syntax"# Sans --force, les modifications sont seulement proposées, pas appliquéesagent -p "Add JSDoc comments to this file" # Ne modifiera aucun fichier# Traitement par lots avec modification effective des fichiersfind src/ -name "*.js" | while read file; do agent -p --force "Add comprehensive JSDoc comments to $file"doneL’option --force permet à l’agent de modifier directement les fichiers sans
confirmation.
Configuration
Voir Installation et Authentification pour les instructions de configuration complètes.
# Installer la CLI de Cursor (macOS, Linux, WSL)curl https://cursor.com/install -fsS | bash# Installer la CLI de Cursor (Windows PowerShell)irm 'https://cursor.com/install?win32=true' | iex# Définir la clé API pour les scriptsexport CURSOR_API_KEY=your_api_key_hereagent -p "Analyze this code"Exemples de scripts
Utilisez différents formats de sortie selon les besoins de vos scripts. Consultez Format de sortie pour en savoir plus.
Recherche dans la base de code
Par défaut, --print utilise le format text pour produire des réponses finales propres :
#!/bin/bash# Question simple sur la base de code - utilise le format texte par défautagent -p "What does this codebase do?"Revue de code automatisée
Utilisez --output-format json pour une analyse structurée :
#!/bin/bash# simple-code-review.sh - Script de revue de code simpleecho "Starting code review..."# Passer en revue les modifications récentesagent -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 1fiSuivi de la progression en temps réel
Utilisez --output-format stream-json pour suivre la progression au niveau des messages, ou ajoutez --stream-partial-output pour diffuser les deltas de manière incrémentielle :
#!/bin/bash# stream-progress.sh - Suivi de la progression en temps réelecho "🚀 Starting stream processing..."# Suivi de la progression en temps réelaccumulated_text=""tool_count=0start_time=$(date +%s)agent -p --force --output-format stream-json --stream-partial-output \ "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") # Traiter uniquement les deltas du flux (timestamp_ms présent, sans model_call_id). # Ignorer les émissions tamponnées avant les appels d’outils et en fin de tour. has_ts=$(echo "$line" | jq 'has("timestamp_ms")') has_mc=$(echo "$line" | jq 'has("model_call_id")') if [ "$has_ts" = "true" ] && [ "$has_mc" = "false" ]; then content=$(echo "$line" | jq -r '.message.content[0].text // empty') accumulated_text="$accumulated_text$content" printf "\r📝 Generating: %d chars" ${#accumulated_text} fi ;; "tool_call") if [ "$subtype" = "started" ]; then tool_count=$((tool_count + 1)) # Récupérer les informations sur 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 # Récupérer 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 doneUtiliser des images
Pour envoyer des images, des fichiers multimédias ou d’autres données binaires à l’agent, incluez les chemins des fichiers dans vos prompts. L’agent peut lire n’importe quel fichier via l’appel d’outils, notamment des images, des vidéos et d’autres formats.
Inclure des chemins de fichiers dans les prompts
Indiquez simplement les chemins de fichiers dans le texte de votre prompt. L’Agent lira automatiquement les fichiers si nécessaire :
# Analyser une imageagent -p "Analyze this image and describe what you see: ./screenshot.png"# Traiter plusieurs fichiers multimédiasagent -p "Compare these two images and identify differences: ./before.png ./after.png"# Combiner des chemins de fichiers avec des instructions textuellesagent -p "Review the code in src/app.ts and the design mockup in designs/homepage.png. Suggest improvements to match the design."Fonctionnement
Lorsque vous incluez des chemins de fichiers dans votre prompt :
- L’agent reçoit votre prompt avec les chemins de fichiers référencés
- L’agent utilise l’appel d’outils pour lire automatiquement les fichiers
- Les images sont traitées de manière transparente
- Vous pouvez référencer des fichiers à l’aide de chemins relatifs ou absolus
Exemple : script d’analyse d’images
#!/bin/bash# analyze-image.sh - Analyser des images avec la CLI en mode headlessIMAGE_PATH="./screenshots/ui-mockup.png"agent -p --output-format json \ "Analyze this image and provide a detailed description: $IMAGE_PATH" | \ jq -r '.result'Exemple : traitement de médias par lots
#!/bin/bash# process-media.sh - Traiter plusieurs fichiers multimédiasfor image in images/*.png; do echo "Processing $image..." agent -p --output-format text \ "Describe what's in this image: $image" > "${image%.png}.description.txt"doneLes chemins de fichiers peuvent être relatifs au répertoire de travail actuel ou absolus. L’Agent lira les fichiers via des appels d’outils. Assurez-vous donc que les fichiers existent et sont accessibles depuis l’emplacement où vous exécutez la commande.