Используй Cursor CLI в скриптах и автоматизации для анализа, генерации и рефакторинга кода.
Используй режим печати (-p, --print) для неинтерактивных сценариев и автоматизации.
Изменение файлов в скриптах
Комбинируй --print с --force, чтобы изменять файлы в скриптах:
# Включить внесение изменений в файлы в режиме печати
cursor-agent -p --force "Refactor this code to use modern ES6+ syntax"
# Без --force изменения только предлагаются и не применяются
cursor-agent -p "Добавь JSDoc-комментарии в этот файл" # Файлы изменены не будут
# Пакетная обработка с фактическими изменениями файлов
find src/ -name "*.js" | while read file; do
cursor-agent -p --force "Добавь развёрнутые JSDoc-комментарии в $file"
done
Флаг --force позволяет агенту вносить изменения в файлы напрямую, без подтверждения
Смотри Installation и Authentication для полной информации о настройке.
# Установка Cursor CLI
curl https://cursor.com/install -fsS | bash
# Установить ключ API для скриптов
export CURSOR_API_KEY=your_api_key_here
cursor-agent -p "Проанализируй этот код"
Используй разные форматы вывода для разных сценариев. Подробности смотри в разделе Output format.
Используй --output-format text для удобочитаемых ответов:
#!/bin/bash
# Простой вопрос о кодовой базе
cursor-agent -p --output-format text "Что делает этот код?"
Автоматическая проверка кода
Используй --output-format json для структурированного анализа:
#!/bin/bash
# simple-code-review.sh - Базовый скрипт для код-ревью
echo "Запускаю код-ревью..."
# Просмотр последних изменений
cursor-agent -p --force --output-format text \
"Проанализируй последние изменения в коде и дай обратную связь по:
- качеству кода и читаемости
- потенциальным багам и проблемам
- вопросам безопасности
- соответствию лучшим практикам
Дай конкретные рекомендации по улучшению и запиши их в review.txt"
if [ $? -eq 0 ]; then
echo "✅ Код-ревью успешно завершено"
else
echo "❌ Не удалось выполнить код-ревью"
exit 1
fi
Отслеживание прогресса в реальном времени
Используй --output-format stream-json для отслеживания прогресса в реальном времени:
#!/bin/bash
# stream-progress.sh — отслеживание прогресса в реальном времени
echo "🚀 Запуск обработки потока..."
# Отслеживание прогресса в реальном времени
accumulated_text=""
tool_count=0
start_time=$(date +%s)
cursor-agent -p --force --output-format stream-json \
"Проанализируй структуру проекта и создай сводный отчёт в 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 "🤖 Используемая модель: $model"
fi
;;
"assistant")
# Накапливаем дельты потокового текста
content=$(echo "$line" | jq -r '.message.content[0].text // empty')
accumulated_text="$accumulated_text$content"
# Показываем прогресс в реальном времени
printf "\r📝 Генерация: %d символов" ${#accumulated_text}
;;
"tool_call")
if [ "$subtype" = "started" ]; then
tool_count=$((tool_count + 1))
# Извлекаем информацию об инструменте
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_count: создаётся $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_count: читаем $path"
fi
elif [ "$subtype" = "completed" ]; then
# Извлекаем и показываем результаты инструмента
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 ($size байт)"
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"
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🎯 Завершено за ${duration} мс (всего ${total_time} с)"
echo "📊 Итоги: инструментов — $tool_count, сгенерировано символов — ${#accumulated_text}"
;;
esac
done