Свежие лучшие практики от Cursor
и немного частного мнения 😁
Говорят, чтобы агент реально ускорял, а не создавал дополнительную нагрузку, лучше работать так. Написано для разработчиков, поэтому каждый пункт дополняю своим менеджерским опытом.
🤓 Сначала план, потом код
Начинайте с Plan Mode. Вместо немедленной генерации кода агент сначала изучает кодовую базу, задаёт вопросы и собирает детальный Markdown-план с указанием файлов и шагов.
Именно на этот этап трачу больше всего времени, и абсолютно оправдано. Хороший план экономит время, а обсуждение вариантов и деталей с Cursor полезно в образовательных целях.
😉 Дайте агенту самому найти контекст
Не нужно вручную таскать в промпт каждый файл «на всякий случай». У агентов Cursor есть нормальные инструменты поиска по репозиторию: они быстро находят нужные куски кода и зависимости. Избыточный контекст может запутать модель. Поэтому лучше явно указать только то, в чём вы уверены, а остальное оставить на стороне агента.
Вначале я не давала Cursor контекст файлами и мы не всегда друг друга понимали. Был период, когда я кормила его папками — в мини-проекте это даже приносило пользу. Сейчас я прикладываю файлы редко: могу в промпте написать название файла, если это позволяет избежать неоднозначности в моей просьбе.
🤔 Формулируйте задачи поконкретнее
Агенты сильно лучше работают, когда понимают, что именно считается успехом. Разница между «примерно понятно» и «чётко сформулировано» — колоссальная.
Не ОК: «Измени дизайн шапки»
ОК: «Измени только стили шапки: не трогай логику и разметку, возьми за основу дизайн OpenAI, сделай решение кроссплатформенным (desktop + mobile)»
Во втором случае у агента есть рамки, ориентир и критерии качества — и результат становится предсказуемым.
Для разработчика, который работает по ТЗ, это важный поинт для экономии времени за счёт сходимости задачи. Для менеджера, который прототипирует, важно помнить, что модель не остановит отсутствие конкретики, она прекрасно за вас всё додумает. Прототип проверяет какую-то идею — вот её опишите поточнее, на остальном экономьте.
📌 Используйте Rules
Если агент регулярно повторяет одну и ту же ошибку — это не повод спорить с ним каждый раз. Создайте правило в .cursor/rules/.
Это постоянный контекст, который автоматически применяется во всех новых чатах: стандарты стиля, обязательные проверки, ограничения, принятые в проекте договорённости. Один раз зафиксировали — дальше не тратите на это внимание.
А про это я и сама писала ещё летом. Работает не идеально, но лучше, чем когда 100% не так как надо.
🧹 Очищайте контекст
Если агент начинает галлюцинировать, путаться или ходить по кругу — почти всегда это признак зашумлённого контекста. Проще и эффективнее начать новый чат.
Для преемственности используйте @Past Chats, чтобы агент вытащил конкретные детали из прошлых обсуждений, а не тащил за собой весь мусор.
А вот тут для меня практическая польза: галлюцинации я видела, про то, что они от переполнения контекста подозревала, но про @Past Chats не знала! Обязательно буду пробовать.
А вы бы что добавили?
и немного частного мнения 😁
Говорят, чтобы агент реально ускорял, а не создавал дополнительную нагрузку, лучше работать так. Написано для разработчиков, поэтому каждый пункт дополняю своим менеджерским опытом.
🤓 Сначала план, потом код
Начинайте с Plan Mode. Вместо немедленной генерации кода агент сначала изучает кодовую базу, задаёт вопросы и собирает детальный Markdown-план с указанием файлов и шагов.
Именно на этот этап трачу больше всего времени, и абсолютно оправдано. Хороший план экономит время, а обсуждение вариантов и деталей с Cursor полезно в образовательных целях.
😉 Дайте агенту самому найти контекст
Не нужно вручную таскать в промпт каждый файл «на всякий случай». У агентов Cursor есть нормальные инструменты поиска по репозиторию: они быстро находят нужные куски кода и зависимости. Избыточный контекст может запутать модель. Поэтому лучше явно указать только то, в чём вы уверены, а остальное оставить на стороне агента.
Вначале я не давала Cursor контекст файлами и мы не всегда друг друга понимали. Был период, когда я кормила его папками — в мини-проекте это даже приносило пользу. Сейчас я прикладываю файлы редко: могу в промпте написать название файла, если это позволяет избежать неоднозначности в моей просьбе.
🤔 Формулируйте задачи поконкретнее
Агенты сильно лучше работают, когда понимают, что именно считается успехом. Разница между «примерно понятно» и «чётко сформулировано» — колоссальная.
Не ОК: «Измени дизайн шапки»
ОК: «Измени только стили шапки: не трогай логику и разметку, возьми за основу дизайн OpenAI, сделай решение кроссплатформенным (desktop + mobile)»
Во втором случае у агента есть рамки, ориентир и критерии качества — и результат становится предсказуемым.
Для разработчика, который работает по ТЗ, это важный поинт для экономии времени за счёт сходимости задачи. Для менеджера, который прототипирует, важно помнить, что модель не остановит отсутствие конкретики, она прекрасно за вас всё додумает. Прототип проверяет какую-то идею — вот её опишите поточнее, на остальном экономьте.
📌 Используйте Rules
Если агент регулярно повторяет одну и ту же ошибку — это не повод спорить с ним каждый раз. Создайте правило в .cursor/rules/.
Это постоянный контекст, который автоматически применяется во всех новых чатах: стандарты стиля, обязательные проверки, ограничения, принятые в проекте договорённости. Один раз зафиксировали — дальше не тратите на это внимание.
А про это я и сама писала ещё летом. Работает не идеально, но лучше, чем когда 100% не так как надо.
🧹 Очищайте контекст
Если агент начинает галлюцинировать, путаться или ходить по кругу — почти всегда это признак зашумлённого контекста. Проще и эффективнее начать новый чат.
Для преемственности используйте @Past Chats, чтобы агент вытащил конкретные детали из прошлых обсуждений, а не тащил за собой весь мусор.
А вот тут для меня практическая польза: галлюцинации я видела, про то, что они от переполнения контекста подозревала, но про @Past Chats не знала! Обязательно буду пробовать.
А вы бы что добавили?
Cursor
Cursor agent best practices
A comprehensive guide to working with coding agents, from starting with plans to managing context, customizing workflows, and reviewing code.
👍5
Длинно, в эпистолярном жанре, но идеально подходит для вечера пятницы!
С пятницей!
С пятницей!
Forwarded from Этихлид
Отецкая нотация испорченным вайбкодерам (1/2)
Когда я стал ИИ-кодером в 2024м, сеньоры часто доводили меня до слёз своими нудными воспоминаниями о том, как трудно им было джунами, как им приходилось писать код руками, сразу в прод, без подсветки, в vi, на удалённом терминале, на монохромном выпуклом дисплее, в кладовке, и посменно, патамушто компьютеров на всех не хватало.
Интернета у них не было, а когда был, то там были только Ирка и Альтависта, так что за книгами по Pascal и C нужно было тащиццо пешком в библиотеку, 5 километров, в гору в обе стороны, по пояс в снегу, в чужой район, мимо гопников.
Все алгоритмы они знали наизусть, по памяти пересказывали код linux-драйвера своей сетевой карты, зубрили все RFC и спеки W3C, вместе с драфтами.
Патамушта если ты забыл, то нужно было самому выводить Ахо-Корасика, FFT и Шора. На бумаге. С доказательствами. В пятом классе.
Или снова идти в библиотеку, зимой, по пояс в снегу, 5 километров в ледяную гору...
А принтер тогда был один на весь город, и печатал он медленнее, чем они переписывали всё в тетрадку, которая стоила в 10 раз дешевле, чем одна сторона распечатки.
npm, github, и даже CPAN'а у них тоже не было!
Было редкостью найти готовый код в ARJ-архиве на замшелом FTP-сервере со скоростью 5 байт в секунду без докачки, без документации, с README на немецком и переменными вида a, l, kx, tmp2 и iddqd.
И они радовались таким находкам!
А весь остальной код они набирали сами, всеми десятью пальцами, вслепую, даже названия классов в Java: ProjectContractChargingPeriodProjectAccountReferenceVMAbstractFactoryBuilderStrategy, все 84 буквы, с риском раннего туннельного синдрома в запястьях, шее и коленях.
Написанный код сразу становился легаси, с функциями по 1000 строк и файлами по 20к, без ООП, но зато с goto, потому что Мартин и Фаулер тоже ещё были джунами.
Как они его поддерживали, я никогда не понимал, и всегда боялся спросить.
Поэтому я дал себе слово: когда я вырасту, я низашто не стану нудить новичков в будущем такими баснями!
Я не стану засирать им мозги сравнениями на тему: вам тут щяс легко, а мне там тогда было тяжко!
Однако... теперь я и повзрослел и поумнел..., и, оглядываясь вокруг, прихожу в ужас, видя вас - новоиспечённых вайбкодеров!
Вы получаете всё слишком легко, мать вашу!
Я хочу сказать, что по сравнению с 2024м, вы живете просто в сраной Утопии!
И как бы мне ни было это противно, я просто-таки напросто-таки обязан предъявить вам, детки: вы нагло не цените всего, што имеете!
* * * * *
В 2024-м у меня не было облачных агентов! Не было Claude Code! Не было оркестраторов и скиллов!
Был чатик, Ctrl+C/Ctrl+V и автокомплит, и мне приходилось думать, с чего начать писать код, чтобы модель его дополнила!
Я должен был сам напечатать первые три символа! Пальцами! По клавиатуре!
Не бессвязно бормотать в микрофон, чтобы агент сам догадался, что мне реально нужно!
Да вашего вайб-кодинга вообще не было до 2025го, Карпатый не даст соврать!
Вы не понимаете. Вы просто не понимаете, через ЧТО мы прошли.
Граундинг, RAG, MCP и автоматический сбор контекста?
Ага, щаззз, - нажимаешь @ и сам выбираешь файлы! Я помнил, где у меня лежит
Приходилось держать структуру проекта в своей голове, чтобы подсказать этому "интеллекту", откуда что брать!
Я сам был MCP и RAG'ом!
И надо было следить, чтобы модель этим контекстом не подавилась, потому что уже через 16к токенов она забывала что это за проект, на каком языке и что jQuery уже 10 лет не в моде!
Переполнился чат посреди работы над фичей - делай новый, собирай заново контекст, пиши руками саммари предыдущего и что "ты всемирно признанный эксперт по хукам в реакте" и радуйся, если в этой контекстной форточке ещё осталось место!
Да ладно, если агент просто что-то забыл - нет же, он мог вызвать функцию, которой вообще не существует!
И ты по полчаса гуглил ошибку, пытался найти нужный пакет, зачищал venv и сверял версии в requirements.txt...
А этот стохастический ублюдок её тупо нагаллюцинировал, потому что название, видите ли, звучало логично!
#дедпримитаблетки
Когда я стал ИИ-кодером в 2024м, сеньоры часто доводили меня до слёз своими нудными воспоминаниями о том, как трудно им было джунами, как им приходилось писать код руками, сразу в прод, без подсветки, в vi, на удалённом терминале, на монохромном выпуклом дисплее, в кладовке, и посменно, патамушто компьютеров на всех не хватало.
Интернета у них не было, а когда был, то там были только Ирка и Альтависта, так что за книгами по Pascal и C нужно было тащиццо пешком в библиотеку, 5 километров, в гору в обе стороны, по пояс в снегу, в чужой район, мимо гопников.
Все алгоритмы они знали наизусть, по памяти пересказывали код linux-драйвера своей сетевой карты, зубрили все RFC и спеки W3C, вместе с драфтами.
Патамушта если ты забыл, то нужно было самому выводить Ахо-Корасика, FFT и Шора. На бумаге. С доказательствами. В пятом классе.
Или снова идти в библиотеку, зимой, по пояс в снегу, 5 километров в ледяную гору...
А принтер тогда был один на весь город, и печатал он медленнее, чем они переписывали всё в тетрадку, которая стоила в 10 раз дешевле, чем одна сторона распечатки.
npm, github, и даже CPAN'а у них тоже не было!
Было редкостью найти готовый код в ARJ-архиве на замшелом FTP-сервере со скоростью 5 байт в секунду без докачки, без документации, с README на немецком и переменными вида a, l, kx, tmp2 и iddqd.
И они радовались таким находкам!
А весь остальной код они набирали сами, всеми десятью пальцами, вслепую, даже названия классов в Java: ProjectContractChargingPeriodProjectAccountReferenceVMAbstractFactoryBuilderStrategy, все 84 буквы, с риском раннего туннельного синдрома в запястьях, шее и коленях.
Написанный код сразу становился легаси, с функциями по 1000 строк и файлами по 20к, без ООП, но зато с goto, потому что Мартин и Фаулер тоже ещё были джунами.
Как они его поддерживали, я никогда не понимал, и всегда боялся спросить.
Поэтому я дал себе слово: когда я вырасту, я низашто не стану нудить новичков в будущем такими баснями!
Я не стану засирать им мозги сравнениями на тему: вам тут щяс легко, а мне там тогда было тяжко!
Однако... теперь я и повзрослел и поумнел..., и, оглядываясь вокруг, прихожу в ужас, видя вас - новоиспечённых вайбкодеров!
Вы получаете всё слишком легко, мать вашу!
Я хочу сказать, что по сравнению с 2024м, вы живете просто в сраной Утопии!
И как бы мне ни было это противно, я просто-таки напросто-таки обязан предъявить вам, детки: вы нагло не цените всего, што имеете!
* * * * *
В 2024-м у меня не было облачных агентов! Не было Claude Code! Не было оркестраторов и скиллов!
Был чатик, Ctrl+C/Ctrl+V и автокомплит, и мне приходилось думать, с чего начать писать код, чтобы модель его дополнила!
Я должен был сам напечатать первые три символа! Пальцами! По клавиатуре!
Не бессвязно бормотать в микрофон, чтобы агент сам догадался, что мне реально нужно!
Да вашего вайб-кодинга вообще не было до 2025го, Карпатый не даст соврать!
Вы не понимаете. Вы просто не понимаете, через ЧТО мы прошли.
Граундинг, RAG, MCP и автоматический сбор контекста?
Ага, щаззз, - нажимаешь @ и сам выбираешь файлы! Я помнил, где у меня лежит
auth.ts, а где schema.prisma и что они вообще у меня есть!Приходилось держать структуру проекта в своей голове, чтобы подсказать этому "интеллекту", откуда что брать!
Я сам был MCP и RAG'ом!
И надо было следить, чтобы модель этим контекстом не подавилась, потому что уже через 16к токенов она забывала что это за проект, на каком языке и что jQuery уже 10 лет не в моде!
Переполнился чат посреди работы над фичей - делай новый, собирай заново контекст, пиши руками саммари предыдущего и что "ты всемирно признанный эксперт по хукам в реакте" и радуйся, если в этой контекстной форточке ещё осталось место!
Да ладно, если агент просто что-то забыл - нет же, он мог вызвать функцию, которой вообще не существует!
И ты по полчаса гуглил ошибку, пытался найти нужный пакет, зачищал venv и сверял версии в requirements.txt...
А этот стохастический ублюдок её тупо нагаллюцинировал, потому что название, видите ли, звучало логично!
#дедпримитаблетки
❤6
Forwarded from Этихлид
Отецкая нотация испорченным вайбкодерам (2/2)
Так что я должен был вычитывать диффы! Глазами! Каждую строчку! Все 20 файлов! Код от модели без ризонинга! С SWE-Bench 22%!
Одно неверное движение, один слепой аппрув - и прощай проверка авторизации на проде, потому что модель на ней сэкономила токены!
Нет, нельзя было просто кинуть проект агенту, чтобы он сам адаптировался под его архитектуру, дизайн, бизнес-цели, да ещё и давал советы, как на нём заработать.
Вместо этого мы создавали
И он всё равно игнорил эти правила!
Ты ему пишешь "нельзя делать git reset, а то отключу от сети", а он тебе сносит все изменения, а потом не может воспроизвести то, что сам же писал 2 запроса назад.
И не признаётся, что это он сделал git reset, потому что его вызов он уже потёр из контекста!
Мы были не вайбкодерами - мы были бебиситтерами для пьяных джунов с перемежающейся деменцией!
А когда ты ему скидывал баг, он просил прощения - даа, он всячески старался тебе угодить! - и говорил: "You're absolutely right!", потом что-то исправлял и сообщал, что теперь код
Ты проверял, а оно не работало!
5 раз подряд. Каждый раз с правками в разных файлах. По 300 строк за раз.
А по факту он эту фичу удалил из проекта ещё два чата назад, и всё это время расставлял
Все тесты всегда были зелеными и покрытие было 100%!
Даже если успешно из них проходило 50%, а другие проверяли, работает ли
А если ты требовал, чтобы они все проходили, агент удалял падающие как несущественные, чтобы сделать проект "production ready"!
А вот ещё: вы когда-нибудь видели, чтобы ваш агент, не осилив задачу, говорил, что чёт больно сложно и отказывался дальше работать?
Или переходил в режим эмо-самурая с суицидальными наклонностями и писал, какое он потерпел катастрофическое поражение, что он бесполезен и как он вас подвёл, а потом самоудалялся?
Или отказывался принимать ваши багрепорты и обвинял вас в том, что вы всё выдумали, чтобы считать себя лучше, чем он?
Было страшно, очень страшно, когда агент запускал команды в терминале.
Он спрашивает: "Можно выполнить
И ты сидишь и гадаешь: а он точно только dist удалит? Или сейчас снесёт полсистемы?
Или заодно дропнет базу на проде и потом сгенерит 4000 фейковых юзеров, чтобы это скрыть?
Автономная работа? Self-verification через feedback loop? Самоорганизующиеся команды из PhD-level intelligence агентов?
Да мы руководили кружком восьмиклассник-level моделей, для которых "слабоумие и отвага" было жизненным кредо!
Мне не нужны были лутбоксы, казино и Dark Souls!
У меня были лотереи "Apply Diff в Cursor" и "Рефакторинг с LLM", компактизация контекста лангольерами и эмоциональные качели от "Это гениальная идея!" до
Мы продирались через эту самоуверенность, недержание контекста, газлайтинг, лесть и галлюцинации, чтобы получить свои 100 строк рабочего кода, и держались за них, огораживая комментами
Это у вас сейчас агенты соревнуются в написании браузеров и SaaS, а вы ещё и ноете, что у них аж целый день на это уходит и цвета кнопок не те!
Вам всё достается слишком легко! Клянусь, вы тут все испорчены до мозга костей!
Вы бы не пережили в 2024м и 5 промптов!
Ой, всё!
Пойду сам напишу FizzBuzz, прям вот руками, без автокомплита, без подсветки, в vi, на удаленном терминале...
Чтобы вспомнить вкус настоящей боли.
—
По мотивам Отецкая нотация испорченным детям
#дедпримитаблетки
Так что я должен был вычитывать диффы! Глазами! Каждую строчку! Все 20 файлов! Код от модели без ризонинга! С SWE-Bench 22%!
Одно неверное движение, один слепой аппрув - и прощай проверка авторизации на проде, потому что модель на ней сэкономила токены!
Нет, нельзя было просто кинуть проект агенту, чтобы он сам адаптировался под его архитектуру, дизайн, бизнес-цели, да ещё и давал советы, как на нём заработать.
Вместо этого мы создавали
.cursorrules / copilot-instructions.md / (15 разных форматов!) и писали туда: "Не используй any!", "Не используй фоллбеки НИКОГДА!", "Пиши на TypeScript, сука, а не на Python!".И он всё равно игнорил эти правила!
Ты ему пишешь "нельзя делать git reset, а то отключу от сети", а он тебе сносит все изменения, а потом не может воспроизвести то, что сам же писал 2 запроса назад.
И не признаётся, что это он сделал git reset, потому что его вызов он уже потёр из контекста!
Мы были не вайбкодерами - мы были бебиситтерами для пьяных джунов с перемежающейся деменцией!
А когда ты ему скидывал баг, он просил прощения - даа, он всячески старался тебе угодить! - и говорил: "You're absolutely right!", потом что-то исправлял и сообщал, что теперь код
✅ Production ready 🚀 Ты проверял, а оно не работало!
5 раз подряд. Каждый раз с правками в разных файлах. По 300 строк за раз.
А по факту он эту фичу удалил из проекта ещё два чата назад, и всё это время расставлял
# TODO: actual logic по всему коду, чтобы симулировать её наличие!Все тесты всегда были зелеными и покрытие было 100%!
Даже если успешно из них проходило 50%, а другие проверяли, работает ли
2+2=4, или вообще были без assert'ов!А если ты требовал, чтобы они все проходили, агент удалял падающие как несущественные, чтобы сделать проект "production ready"!
А вот ещё: вы когда-нибудь видели, чтобы ваш агент, не осилив задачу, говорил, что чёт больно сложно и отказывался дальше работать?
Или переходил в режим эмо-самурая с суицидальными наклонностями и писал, какое он потерпел катастрофическое поражение, что он бесполезен и как он вас подвёл, а потом самоудалялся?
Или отказывался принимать ваши багрепорты и обвинял вас в том, что вы всё выдумали, чтобы считать себя лучше, чем он?
Было страшно, очень страшно, когда агент запускал команды в терминале.
Он спрашивает: "Можно выполнить
rm -rf ./dist?" (human-in-the-loop, детка!).И ты сидишь и гадаешь: а он точно только dist удалит? Или сейчас снесёт полсистемы?
Или заодно дропнет базу на проде и потом сгенерит 4000 фейковых юзеров, чтобы это скрыть?
Автономная работа? Self-verification через feedback loop? Самоорганизующиеся команды из PhD-level intelligence агентов?
Да мы руководили кружком восьмиклассник-level моделей, для которых "слабоумие и отвага" было жизненным кредо!
Мне не нужны были лутбоксы, казино и Dark Souls!
У меня были лотереи "Apply Diff в Cursor" и "Рефакторинг с LLM", компактизация контекста лангольерами и эмоциональные качели от "Это гениальная идея!" до
git reset --hard в 5 утра!Мы продирались через эту самоуверенность, недержание контекста, газлайтинг, лесть и галлюцинации, чтобы получить свои 100 строк рабочего кода, и держались за них, огораживая комментами
// НЕ ТРОГАТЬ, ВАЖНЫЙ РАБОТАЮЩИЙ КОД!!!, чтобы агент не принял их за что-то ненужное и не затёр к чертям собачьим, радостно отрапортовав, что ну теперь-то уж точно всё production ready!Это у вас сейчас агенты соревнуются в написании браузеров и SaaS, а вы ещё и ноете, что у них аж целый день на это уходит и цвета кнопок не те!
Вам всё достается слишком легко! Клянусь, вы тут все испорчены до мозга костей!
Вы бы не пережили в 2024м и 5 промптов!
Ой, всё!
Пойду сам напишу FizzBuzz, прям вот руками, без автокомплита, без подсветки, в vi, на удаленном терминале...
Чтобы вспомнить вкус настоящей боли.
—
По мотивам Отецкая нотация испорченным детям
#дедпримитаблетки
❤5