VibeCoderzVibeCoderz
Все статьи
Промпты2026/06/188 мин чтения

Как написать скрипт: правильный промпт для Cursor чтобы получить рабочий код с первого раза

Получите рабочий скрипт с первого запроса, если в промпт включите язык, задачу, данные, формат вывода и обработку ошибок – так AI точно сгенерирует нужный код.

Содержание (10)+

Обновлено: октябрь 2026

Большинство людей, которые первый раз открывают Cursor, пишут что-то вроде: «напиши скрипт для переименования файлов» — и получают заготовку, которая не работает в их конкретном случае. Причина не в нейросети. Причина в промпте.

Чтобы получить рабочий код с первого раза, промпт должен содержать пять элементов: язык (Python 3.11, Bash, Google Apps Script), задача (что именно делает скрипт), входные данные (откуда берёт), формат вывода (куда сохраняет или что возвращает) и обработка ошибок (что делает, если что-то пошло не так). Без этого Cursor угадывает — и чаще всего угадывает неверно.

В этой статье: готовая формула промпта, три конкретных примера с кодом для Python, Bash и Google Apps Script, и разбор типичных ошибок.


В 2026 году Cursor, Windsurf и другие AI IDE генерируют рабочие скрипты за 1–2 минуты — но только при правильно составленном промпте. Формула: язык + задача + данные + вывод + ошибки. Примеры для Python, Bash и Google Apps Script — ниже.


Почему скрипт «не работает с первого раза»?

AI IDE видит весь ваш проект, но не знает вашу задачу. Без конкретики — угадывает. Угадывает неверно в 7 из 10 случаев.

Это наблюдение, которое повторяется у всех, кто начинает работать с AI-кодингом. Cursor очень хорошо понимает синтаксис. Bash, Python, JavaScript, TypeScript — всё это он знает. Но у него нет телепатии.

Изображение

Когда вы пишете «сделай скрипт для обработки файлов», агент заполняет пробелы самостоятельно: придумывает формат входных данных, выбирает директорию по умолчанию, решает, что делать с ошибками. Иногда угадывает правильно. Чаще — нет.

Проблема не в модели. Проблема в том, что промпт для скрипта и промпт для обычного вопроса — это разные вещи. Чат GPT принимает размытые запросы, потому что работает с текстом. Cursor генерирует исполняемый код — и там каждая деталь имеет значение.

Максим: «Я это понял на третьей итерации с GoBanana. Писал промпт как в обычном чате: "добавь функцию загрузки фото". Получал код, который падал на проде. Потом начал писать как техзадание — язык, что принимает, что возвращает, что при ошибке. Стало работать с первой попытки почти всегда.»
Изображение

Формула промпта: 5 элементов рабочего скрипта

Укажи все пять — получишь рабочий код. Пропусти хотя бы один — Cursor начнет угадывать.

Это не академическая теория. Это практический чеклист, который сокращает количество итераций в 3–4 раза.

Элемент 1 — Язык с версией. Не просто «Python», а «Python 3.11». Не просто «Bash», а «Bash для macOS Sequoia» или «Bash для Ubuntu 22.04». Разница есть: синтаксис date в macOS и Linux отличается, sed работает по-разному. Cursor учитывает это, когда вы уточняете.

Элемент 2 — Задача. Одно конкретное действие. Не «обработать файлы», а «переименовать все .jpg файлы в директории, добавив дату создания в начало имени файла». Чем точнее — тем меньше вариантов интерпретации.

Элемент 3 — Входные данные. Откуда скрипт берёт данные: аргумент командной строки, переменная окружения, конкретный путь, CSV-файл, переменная в Google Таблице. Это критично. Один и тот же скрипт будет написан по-разному для «читает путь из аргумента» и «читает путь из .env файла».

Элемент 4 — Формат вывода. Куда сохраняет результат: в файл, в stdout, в папку, в Telegram, в Google Sheets. Если нужен конкретный формат — укажи его.

Элемент 5 — Обработка ошибок. Что делать, если файл не найден, нет прав доступа, API вернул ошибку. Без этого пункта Cursor напишет «счастливый путь» — код, который работает только при идеальных условиях.

Изображение
ЭлементПлохоХорошо
Язык«Python»«Python 3.11 на macOS»
Задача«обработать файлы»«переименовать .jpg, добавить дату в начало»
Входные данныене указано«принимает путь к папке как первый аргумент»
Выводне указано«выводит лог в stdout, ошибки в stderr»
Ошибкине указано«при отсутствии файла — пропустить, вывести предупреждение»

Как выглядит правильный промпт в Cursor

Скопируй шаблон, подставь свои данные — и запускай.

Вот готовый шаблон. Это не магия — это структурированное техзадание для агента:

Напиши скрипт на [ЯЗЫК + ВЕРСИЯ].

Задача: [ОДНО КОНКРЕТНОЕ ДЕЙСТВИЕ].

Входные данные: [ОТКУДА БЕРЕТ ДАННЫЕ].

Выходные данные: [ЧТО И КУДА СОХРАНЯЕТ].

Обработка ошибок: [ЧТО ДЕЛАТЬ ПРИ СБОЕ].

Дополнительно: добавь комментарии к ключевым блокам.

Последняя строка про комментарии — не обязательная, но полезная. Cursor объяснит каждый блок кода, и вы сможете изменить нужную часть в следующей итерации, не разбирая весь скрипт с нуля.

Изображение

Пример 1. Python: скрипт для бэкапа папки с датой

Классическая задача автоматизации — архивировать папку и добавлять дату в имя файла.

Вот как выглядит промпт по формуле:

Напиши скрипт на Python 3.11 для macOS.

Задача: создать tar.gz архив папки.

Входные данные: принимает путь к папке как первый аргумент командной строки (argparse).

Выходные данные: сохраняет архив в ту же директорию, что и исходная папка. Имя файла: backup_YYYYMMDD.tar.gz.

Обработка ошибок: если папка не существует — вывести понятное сообщение и выйти с кодом 1. Если нет прав на запись — тоже сообщить об этом.

Дополнительно: добавь комментарии к ключевым блокам.

Cursor выдаст что-то близкое к этому:

#!/usr/bin/env python3
"""Скрипт для создания tar.gz бэкапа папки с датой в имени файла."""

import argparse
import os
import tarfile
from datetime import datetime
from pathlib import Path


def parse_args():
    """Парсит аргументы командной строки."""
    parser = argparse.ArgumentParser(description="Бэкап папки в tar.gz архив")
    parser.add_argument("source", help="Путь к папке для бэкапа")
    return parser.parse_args()


def create_backup(source_path: Path) -> Path:
    """Создаёт архив и возвращает путь к нему."""
    # Имя архива: backup_YYYYMMDD.tar.gz
    date_str = datetime.now().strftime("%Y%m%d")
    archive_name = f"backup_{date_str}.tar.gz"
    output_path = source_path.parent / archive_name

    with tarfile.open(output_path, "w:gz") as tar:
        # Добавляем только содержимое папки, без полного пути
        tar.add(source_path, arcname=source_path.name)

    return output_path


def main():
    args = parse_args()
    source = Path(args.source)

    # Проверяем, что папка существует
    if not source.exists():
        print(f"Ошибка: папка '{source}' не найдена", flush=True)
        raise SystemExit(1)

    # Проверяем права на запись в родительской директории
    if not os.access(source.parent, os.W_OK):
        print(f"Ошибка: нет прав на запись в '{source.parent}'", flush=True)
        raise SystemExit(1)

    result = create_backup(source)
    print(f"Бэкап создан: {result}")


if __name__ == "__main__":
    main()

Запуск: python3 backup.py ~/Documents/MyProject

Это рабочий код. Не заготовка — именно рабочий. Потому что промпт содержал все пять элементов.

Пример 2. Bash: скрипт мониторинга доступности сайта

Bash удобен для автоматизации на Linux/macOS: не нужны дополнительные зависимости.

Промпт по формуле:

Напиши скрипт на Bash для Linux (Ubuntu 22.04).

Задача: проверить доступность веб-сайта по HTTP статусу.

Входные данные: принимает URL как первый аргумент командной строки ($1).

Выходные данные: выводит в stdout сообщение "Сайт доступен" или "Сайт недоступен: [код ответа]".

Обработка ошибок: если аргумент не передан — вывести инструкцию по использованию. Если curl недоступен — сообщить об этом.

Дополнительно: добавь shebang и права на выполнение через комментарий.

Результат:

#!/bin/bash
# Проверка доступности сайта по HTTP статус-коду
# Использование: ./ping_check.sh https://example.com
# Права: chmod +x ping_check.sh

# Проверяем, передан ли аргумент
if [ -z "$1" ]; then
    echo "Использование: $0 <url>"
    echo "Пример: $0 https://example.com"
    exit 1
fi

# Проверяем наличие curl
if ! command -v curl &>/dev/null; then
    echo "Ошибка: curl не установлен. Установите: sudo apt install curl"
    exit 1
fi

URL="$1"

# Получаем HTTP статус-код, перенаправляем тело ответа в /dev/null
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "$URL")

# Проверяем статус-код
if echo "$HTTP_CODE" | grep -q "^2"; then
    echo "Сайт доступен (HTTP $HTTP_CODE): $URL"
else
    echo "Сайт недоступен (HTTP $HTTP_CODE): $URL"
    exit 1
fi

Права на выполнение: chmod +x ping_check.sh

Запуск: ./ping_check.sh https://vibecoderz.ru

Обратите внимание на строку с grep -q "^2" — скрипт считает доступными все коды 2xx (200, 201, 204), а не только 200. Это более корректно для реальных API.

Пример 3. Google Apps Script: автоматическая рассылка по данным из таблицы

Если вы работаете в Google Workspace, Apps Script — самый быстрый способ автоматизировать рутину без деплоя.

Промпт:

Напиши скрипт на Google Apps Script.

Задача: отправить email каждому человеку из таблицы.

Входные данные: активный лист Google Sheets. Колонка A — имя, колонка B — email, колонка C — сумма заказа.

Выходные данные: каждому адресату отправить email с темой "Ваш заказ" и телом "Привет, [Имя]! Ваш заказ на сумму [Сумма] руб. подтверждён."

Обработка ошибок: пропустить строки с пустым email. Логировать каждую отправку в консоль.

Cursor выдаст:

/**
 * Отправляет email каждому получателю из активного листа.
 * Колонки: A — имя, B — email, C — сумма заказа.
 */
function sendOrderEmails() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const data = sheet.getDataRange().getValues();

  // Пропускаем первую строку (заголовки), начинаем с индекса 1
  for (let i = 1; i < data.length; i++) {
    const name = data[i][0];
    const email = data[i][1];
    const amount = data[i][2];

    // Пропускаем строки без email
    if (!email) {
      console.log(`Строка ${i + 1}: email отсутствует, пропускаю`);
      continue;
    }

    const subject = "Ваш заказ";
    const body = `Привет, ${name}! Ваш заказ на сумму ${amount} руб. подтверждён.`;

    // Отправляем email
    GmailApp.sendEmail(email, subject, body);
    console.log(`Отправлено: ${email} (${name}, ${amount} руб.)`);
  }

  console.log("Рассылка завершена");
}

Запустить через: Extensions -> Apps Script -> Run.

Изображение

Как работать с Cursor, когда скрипт всё же не заработал

Первая итерация редко бывает последней. Вот как правильно итерировать.

Даже при хорошем промпте скрипт иногда не работает с первого раза. Это нормально — особенно если задача нестандартная или есть зависимости от конкретной среды.

Правило одно: не переписывай промпт полностью. Уточняй конкретную проблему.

Плохо: «это не работает, переделай»
Хорошо: «скрипт падает с ошибкой PermissionError: [Errno 1] на строке 34. Это папка без прав записи — добавь проверку через os.access() перед созданием файла»

Cursor видит весь контекст проекта. Если вы добавили файл в чат или перетащили его в окно агента, он понимает структуру. Поэтому уточнять ошибки лучше конкретно, а не просить «переписать всё заново».

Ещё один лайфхак из видео про Cursor: при старте с большого проекта сначала отправьте агенту промпт «расскажи, о чём проект» — без задачи. Пусть Cursor прочитает весь код и опишет структуру. После этого его ответы по конкретным задачам станут точнее, потому что контекст уже загружен.

Изображение

Cursor или Windsurf для написания скриптов?

Оба инструмента справятся. Разница в деталях рабочего процесса.

Если вы выбираете между двумя IDE именно для написания скриптов — вот прямое сравнение:

ПараметрCursorWindsurf
СтабильностьВышеПериодически глючит
Превью результатаНет встроенногоЕсть Preview прямо в IDE
MCP-интеграцииТребует подтвержденийРаботает без промежуточных вопросов
Тарифыот $20/месот $15/мес
Бесплатная модельОграниченный Free PlanCascade Base (без расхода токенов)
Деплой скриптаРучнойКнопка Deploy Application

Для написания скриптов без превью результата (Python, Bash) — оба одинаково удобны. Windsurf выигрывает, когда нужно посмотреть на результат прямо в IDE: например, скрипт генерирует веб-страницу или интерфейс. Cursor стабильнее на больших проектах.

Подробные обзоры обоих инструментов — на vibecoderz.ru/item/cursor и vibecoderz.ru/item/windsurf.

Изображение

Режим агента vs обычный чат: что выбрать для скриптов

Для написания скриптов всегда используй агентный режим — он видит файлы и может их редактировать напрямую.

В Cursor есть два режима: чат (Chat) и агент (Agent). В чате модель отвечает только текстом. В режиме агента она видит структуру вашего проекта, читает файлы и может записывать изменения прямо в них.

Для скриптов это принципиально. Агент не просто покажет код — он создаст файл, поставит права, запустит тест. Вы увидите результат сразу, без копипасты.

Как переключиться: в Cursor выберите режим «Auto» в правом окне чата. В Windsurf — режим «Write» (по умолчанию).

При работе с большими файлами (более 500 строк) — добавьте конкретный файл в контекст через @filename или перетащите его в окно чата. Тогда агент не будет «читать весь проект» и потратит меньше токенов на вашу задачу.

Изображение

FAQ

Обязательно ли использовать Cursor? Или можно в обычном ChatGPT?
Можно в ChatGPT — формула промпта работает везде. Cursor удобнее тем, что видит структуру проекта и может создавать файлы напрямую. Для разовых скриптов разница небольшая, для работы с проектом — существенная.

Что делать, если Cursor сгенерировал код, но он упал с ошибкой?
Скопируйте полный текст ошибки прямо в чат и напишите: «получил такую ошибку, исправь». Не переформулируйте задачу — просто добавьте сообщение об ошибке. Cursor разберётся.

Можно ли писать промпты на русском?
Да, Cursor понимает русский. Но для технических деталей (имена переменных, пути, форматы) лучше использовать английский — это снижает риск неоднозначности в коде.

Как запустить Bash-скрипт на Windows?
Нужен WSL (Windows Subsystem for Linux) или Git Bash. Установите через Microsoft Store: «Ubuntu» или «WSL». После этого Bash-команды работают как на Linux.

Нужно ли знать Python, чтобы писать скрипты через Cursor?
Не обязательно. Но базовое понимание того, что делает каждый блок кода, сильно ускорит итерации. Cursor объяснит любой блок кода по запросу: просто напишите «объясни что делает строка X».

Как передать файл агенту, чтобы он работал именно с ним?
В Cursor — перетащите файл в окно чата или используйте @имя_файла. В Windsurf — то же самое. Агент тогда сфокусируется на конкретном файле, а не будет сканировать весь проект.

Что такое «режим Auto» в Cursor и зачем он нужен?
Auto — режим, при котором Cursor автоматически выбирает модель под задачу. Для простых скриптов берёт легкую модель (экономит токены), для сложной архитектуры — тяжёлую. Для большинства задач это оптимальный выбор.


Полный каталог AI-инструментов для разработки — на vibecoderz.ru/ide. Если хочешь разобраться с конкретной задачей автоматизации, запишись на консультацию к Максиму: telegram.me/maxnagovitsyn.


Обновлено: октябрь 2026. Данные по тарифам и моделям актуальны на момент публикации.


Автор

Максим Наговицын

Маркетинг-стратег, IT-предприниматель, ментор по вайбкодингу

2026/06/18

10+ лет в маркетинге, 300+ клиентских проектов: сайты, реклама, боты. Создатель GoBanana (228K+ пользователей, 11.6 млн ₽ выручки) и VibeCoderz. Делаю AI-продукты сам через Claude Code, Cursor, Windsurf и консультирую тех, кто хочет так же.

Об авторе →
All Posts

Инструменты, упомянутые в статье

Читать далее

📄 Статья

Промпт для агента перед стартом проекта вместо сделай красиво

Хороший промпт для старта проекта не описывает продукт. Он заставляет агента сначала пересказать задачу, задать вопросы и показать план, и только потом писать код. Один такой промпт экономит час объяснений и десяток переделок. Ниже разберем, из чего…

2026/07/138 мин
📄 Статья

v0 от Vercel: как генерировать React-компоненты по описанию

С помощью v0 от Vercel можно быстро создать полноценный React‑компонент из простого описания: промпт на любом языке генерирует код с Tailwind и shadcn/ui, а бесплатный тариф даёт 5 $ кредитов в месяц. В статье показан пошаговый пример, сравнение с конкурентами и детали цен.

2026/07/077 мин
📄 Статья

Telegram-бот для бизнеса 2026 стек PRD-промпт и запуск за вечер в Windsurf

Создай Telegram‑бота за один вечер – без кода и агентств – с Python, aiogram 3, Supabase, Claude Sonnet 4.6 и Railway, и тратой всего 500 руб/мес. Это быстрый, экономичный способ автоматизировать заявки, FAQ и лид‑прогрев.

2026/06/2412 мин
📄 Статья

Промпт PRD для Telegram-бота в Windsurf и Cursor (2026)

Структурированный PRD‑промпт из 7 блоков позволяет за один раз создать Telegram‑бота с FSM‑логикой, базой и интеграциями, используя Windsurf или Cursor.

2026/06/2411 мин
📄 Статья

Создать CRM через вайбкодинг: промпт, стек и что получится за один вечер

Создай простую CRM за один вечер: таблица клиентов, канбан, фильтрация и история звонков, используя готовый промпт и стек Next.js + Supabase.

2026/06/247 мин
📄 Статья

Как написать парсер сайта на Python за 30 минут: промпт для Cursor и готовый код

Соберите данные с любого статического сайта за 30 минут, используя готовый промпт для Cursor/Windsurf и скрипт на requests, BeautifulSoup4 и pandas, который сразу экспортирует в CSV.

2026/06/1810 мин