📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

Cursor AI: Полный гайд по вайбкодингу с нуля. Subagents, Hooks, Skills, Rules, Commands, MCP

Alexey Andreevsky2:43:21

Transcription

Открываю курсор, прошу сделать мне персональный сайт, и буквально через несколько минут у меня готовый сайт со всеми необходимыми разделами. Вот так выглядит разработка в 2026 году.

Ладно, на самом деле это не совсем так. Я просто решил приколоться и немного триггернуть ваше внимание. Этот сайт я делал в течение примерно недели, но делал я его в курсоре. Это я сказал правильно. И на самом деле при должном подходе к разработке реальность не то чтобы кардинально отличается от того, что я показал в начале. Конечно, делается это не за один промт, да и курсор нужно настроить под себя, чтобы он эффективно работал. И как раз этим мы сегодня с вами и займёмся.

Здорово, вайпкодеры и те, кто хотят стать вайп-кодерами. Сегодня мы разберём с вами один из самых популярных инструментов для вайп-кодинга, а именно курсор. Я очень люблю эту программу и пользуюсь им уже достаточно давно. И всё-таки при подготовке к этому гайду я почерпнул для себя очень много нового. Думаю, и вы для себя откроете что-то новое и полезное после просмотра этого видео. Материал получился плотный, насыщенный, поэтому сохраняйте себе это видео, чтобы не потерять. Вполне возможно, что вам захочется пересмотреть некоторые моменты, чтобы лучше усвоить принципы работы в этой программе.

Это видео рассчитано как на новичков-вайпкодеров, которые, возможно, впервые в жизни откроют для себя разработку с ИИ агентами. Но также это видео будет полезно уже опытным вайп-кодерам. Да и опытные разработчики тоже смогут открыть для себя что-то новое. Всё, как обычно, с меня годнота, с вас лайк и подписка. И мы начинаем.

В этом видео мы с нуля разберёмся, как работать в курсоре. Начнём с самого простого и при этом самого кайфового - это с ИИ агентов, которые будут за нас писать код. Продолжим более углублёнными настройками, а именно разберёмся, что такое правила, как их писать, как их использовать, что такое команды, скилы, субагенты, хуки. Разберёмся, что такое MCP. Подключим этот MCP, посмотрим, как они подключаются. В общем, разберём всё то, что сделает ваш пользовательский опыт как разработчика курсора максимально приятным, чтобы вы вайпкодили, кайфовали от процесса и как можно меньше заморачивались.

О'кей, закончим со вступительной речью и давайте разбираться. Первое, что нам нужно сделать - это, конечно же, скачать сам курсор. Делается это достаточно просто. Переходим на официальный сайт kursor.com. И на главной странице нас встречает предложение скачать, собственно, сам курсор. Нажимаем скачать, запускаем, устанавливаем. Думаю, с этим у вас вопросов не возникнет, поэтому досконально этот процесс я сейчас проходить не буду. Курсор у меня уже установлен. Я думаю, с этим вы справитесь.

После того, как вы скачали и установили курсор, очевидно, нужно его запустить. Мы его запускаем, откроется, ну, примерно что-то такое. Я честно точно не помню. Сейчас удалять его заново ставить я не буду, но около такой вот картинки вы должны, по идее, увидеть. Если вы раньше использовали для разработки программу Visual Studio Code, то у меня для вас хорошие новости. Ну, хорошие только, если она вам нравилась. Курсор сделан на базе Visual Studio Code. Ну, техническим языком это Fork Visual Studio Code, то есть его скопировали и дополнили новым функционалом. Что нам это даёт? Мы можем импортировать настройки из Visual Studio кода. Например, у вас там была какая-то тема настроена, цвета, шрифты и так далее. И все эти настройки мы можем импортировать в курсор, чтобы не настраивать всё заново.

Скорее всего, при первом запуске курсор вас спросит об этом, ну, точнее, предложит импортировать настройки из Visual Studio кода, если он у вас установлен. Но также это можно сделать уже после установки. Для этого нужно перейти в настройки курсора. Во вкладке General есть раздел Preferences. И здесь есть пункт import settings from VS Code. Здесь можно нажать на кнопочку импорт и импортировать настройки из Visual Studio кода.

Также, чтобы работать в курсоре, вам нужно зарегистрировать аккаунт. Делается это очень просто. На сайте курсора нажимаем на кнопочку Sign in, после чего перейти по ссылке регистрация. На этой странице вы можете либо авторизоваться через один из предложенных сервисов, либо создать новый аккаунт на вашу электронную почту. Чтобы авторизоваться в самой программе, переходим в настройки курсора. И здесь, в разделе Manage account, у вас будет кнопочка логин. Вы на неё нажимаете, открывается браузер, где вы авторизованы в своём аккаунте, после чего курсор авторизует вас в самом приложении.

На этом этапе мы уже можем начинать работать. И первое, что нам нужно сделать - это открыть какую-то папку, в которой мы будем работать. Это можно сделать либо нажав на кнопочку Open Project и далее создать или выбрать нужную папку. Либо здесь есть список недавних проектов, которые были уже открыты. В нём также можно выбрать проект, который вы хотите открыть. Я сейчас открою папку Cursor Guide, которая у меня сейчас пока что пустая.

Когда мы выбрали папку, в которой мы будем работать, у нас открывается непосредственно сам интерфейс для работы в курсоре. И открываться он может у вас, вообще-то говоря, по-разному. То есть не обязательно он должен выглядеть именно так. Здесь в настройках в правом верхнем углу есть выбор вида интерфейса. Причём их можно создавать новые, ну, собственно, конфигурации окон, которая будет открыта. По умолчанию, если я не ошибаюсь, в курсоре сейчас открывается вид в режиме агента, в котором находится окно с чатом, непосредственно с агентом, и список этих чатов, которые ранее были созданы. Что это такое, мы разберём уже очень скоро, но пока что давайте про форматы вообще интерфейса поговорим.

Здесь помимо агента есть режим. Он очень похож, просто немножко меняются расположения окон. Чат с агентом сохраняется просто. Теперь он находится справа. Слева у нас открывается список наших файлов. То есть вот тут их пока что нет, но скоро они здесь у нас появится. Кроме этого есть режим EN, в котором вообще ничего не видно, и режим браузера, в котором открывается в отдельной вкладке браузер, куда мы можем записать какой-то URL. И к этому мы ещё вернёмся. Браузер тоже мы с вами разберём. Это очень классная функция внутри курсора, но к нему вернёмся чуть позже. В общем, большой разницы, какой вариант отображения вы здесь выберете, нету. В любом случае, здесь всегда можно включить определённые окна, которые вам нужны. Вот они, собственно, пять основных окон. Агенты - это список агентов. Чат - это, ну, непосредственно чат с каким-то конкретным агентом. Editors - это, ну, вот эта панель. Здесь пока что ничего нет, но в ней отображается содержимое файлов, которые можно редактировать руками. Также здесь есть раздел панель. Панель включает в себя несколько вкладок. Чаще всего здесь вы, скорее всего, будете использовать терминал, но, в принципе, здесь есть ещё какие-то вкладки с проблемами: аутпутом, дебагом, терминалом, портами. Короче, если вы трушный вайб-кодер, вообще первый раз в жизни видите программу для редактирования кода, вообще забейте, вам пока это не надо. Ну вот терминал вам может пригодиться, а всё остальное можно пока что вообще не брать во внимание.

Терминал, кроме как вот этим переключателем в панели, можно открыть ещё с помощью кнопки Show Terminal. Вот здесь, если никакого файла не выбрано, то появляется вот эта превьюха. Здесь можно Show Terminal сделать либо сверху, вот в этих панелях самой программы здесь можно выбрать терминал New Terminal. Ну ладно, пока что внимания на это не обращаем, забейте. Лично мне удобнее всё-таки работать в режиме Edit. Я привык, что у меня список файлов находится слева. Чат с нейронкой находится справа и посередине я могу смотреть на файлы, которые я редактирую, либо которые редактируют нейронка. Я буду использовать такой вид. Но от перестановки положения этих окон вообще ничего не меняется, поэтому вы можете настроить это так, как вам это удобно.

О'кей, с интерфейсом плюс-минус разобрались. Это вот основные вещи, которые нужно знать, и остальные всякие вкладочки, кнопочки мы просто по мере необходимости будем разбирать. Сейчас мы, на самом деле, уже можем работать с нейронкой. Для этого мы будем использовать вот это окно с чатом. Сюда, собственно, пишутся промты для нейронки. Если вы хоть раз в жизни пользовались нейросетью, то вам уже должно быть это привычно. Это такой же чат, как и во всех других интерфейсах для работы с нейросетями. То есть аналогичный чат, как, допустим, в Claude или в ChatGPT. То есть вы можете писать здесь какие-то промты, вопросы, что угодно, что туда писать. Сейчас как раз разберём. Но перед тем, как мы что-то туда напишем, я коротко расскажу про вот тут несколько настроечек, которые будут для вас полезны.

Начнём с модели. Если вы не проплатили какую-то подписку в курсоре, то, скорее всего, у вас здесь будет модель Auto, и при этом остальные модели у вас доступны не будут. Что такое модель? Ну, если вдруг вы не знаете, модель - это вот тот самый мозг нейронки, который выдаёт нам ответы. Весь вот этот визуальный интерфейс - это просто, ну, типа какая-то обёртка, в которую мы что-то пишем, но потом все наши запросы отправляются в модель. Ну вот, если просто, да, объяснять. Вот отправляется в эту модель, она там что-то думает и нам отвечает и делает наши задачи.

Пару слов по поводу моделей. У меня сейчас выбрана модель Sonnet 4.5. Ну, на мой взгляд, она самая оптимальная с точки зрения стоимости и качества кода, который она генерит. Мо. Sonnet 4.5 - это модель от компании Anthropic. Также на платных подписках есть достаточно много моделей. Если у вас в списке вот здесь вот их почему-то нет, то вы можете нажать на кнопочку Add Models и здесь посмотреть полный список моделей. Вот можно View All Models. Их достаточно много. Если вы по какой-то причине хотите использовать какую-нибудь другую, без проблем здесь можно посмотреть, найти ту, которая вам нужна. Также здесь можно добавить ключи, чтобы запросы шли не через вашу подписку в курсоре, а по API ключам. Но это отдельная тема, сейчас в это вникать не будем. И вообще начнём с самого простого. Короче, какую модель выбрать? Если у вас неоплаченная подписка, то выбор там небольшой. Скорее всего, там будет доступно только Auto. Я, честно говоря, не помню. Если подписка у вас всё-таки платная и вы не знаете, какую модель выбрать, берите Sonnet 4.5. Всё. Это вот оптимальная модель. Если вы хотите модель помощнее, то выбирайте Opus 4.5. Ну либо там последней версии, которая есть. Если вы хотите модель попроще, то выбирайте Haiku. Это все модели от компании Anthropic. В моём топе это мои фавориты. Я не спорю, что есть и другие хорошие модели. Gemini 3 Pro вроде неплохая. GPT лично мне не зашёл, когда я им пользовался. Но не знаю, можете попробовать. На самом деле я вам тут не указ. Берите любую, смотрите, как она вам отвечает. И если вам понравится, то, пожалуйста, используйте другую модель. Просто чтобы у вас не было такого, что вы включили какую-то модель, вам нейронка ничего толкового не сделала и вы разочаровались во всём вайп-кодинге. А такое может быть, если вы выберете какую-то там простую, самую дешёвую модель. Ну, режим Auto, на самом деле, ээ тоже у меня складываются такие впечатления. Короче, чтобы такого не было и просто прочувствовать это. Вот берите Sonnet 4.5. Вот всё вас это должно устроить для начала. Дальше вы уже можете понять, хотите помощнее, берёте Opus, хотите быстрее и дешевле, берёте Haiku. Остальное экспериментируйте, как хотите. Может быть, вам зайдёт что-то ещё.

Пока мы не ушли далеко от моделей, сразу скажу, как здесь считаются, собственно, затраты. Да, мы оплачиваем подписку, допустим, самая дешёвая, там, 20 баксов на месяц, и в ней есть лимиты. Теоретически вы можете упереться в эти лимиты раньше, чем закончится месяц, который вы оплатили, и курсор вам скажет: "Ну либо включайте оплату по факту". Тогда у вас будет капать, так сказать, задолженность на счёт. Она дойдёт там где-то до 20 долларов, после чего курсор попросит вас оплатить эту задолженность, и пока вы её не оплатите, работать он вам не даст. Ну, собственно, и всё. Так устроены лимиты. То есть в каждом из тарифных планов, там за 200 баксов или за 20 баксов, есть какой-то объём лимитов, в который вы потенциально можете упереться раньше, чем закончится ваш месяц подписки. Если вы берёте подписку, например, на год, то, соответственно, на следующий месяц ваша подписка обновляется, у вас лимиты обнуляются, и вы можете снова пользоваться инструментом.

Идём дальше. Рядом с моделью у нас есть выбор режима, в котором мы будем работать с нейронкой. На текущий момент есть четыре режима. Это Agent, Plan, Debug и Ask. Давайте вкратце расскажу, что это. Более конкретно, наверное, чуть попозже посмотрим. Агент - это, собственно, ИИ агент, который будет редактировать код. Ну, на самом деле, если вы его не просите что-то отредактировать, он может просто вам ответить. Но у него есть доступ к редактированию, созданию файлов, удаление файлов. Он, скорее всего, будет спрашивать у вас, можно ли удалить, но он это тоже умеет. Умеет запускать какие-то консольные команды, также умеет заходить в интернет. То есть вы можете дать ему сюда какую-то ссылку на документацию или сайт с какой-то информацией, чтобы он посмотрел на визуальную составляющую. Короче, по сайтам ходить он умеет. Это классно, на самом деле. Очень удобная штука. Для этого достаточно просто скопировать ссылку, вставить ему сюда в чат. И вы можете заметить, что ссылка относительно простого текста, она подсвечивается синеньким. Значит, что курсор воспринимает это как ссылку. Если вы хотите, чтобы URL, который вы сюда вставили, не подсвечивался как ссылка, то есть, чтобы он его как бы как текст воспринимал, что ли, нужно не просто Ctrl V или Command V нажать, да? Нужно нажать Command Shift V. Ну или, наверное, Ctrl Shift V, если вы на винде. На Линуксе, наверное, тоже. Не знаю. Тогда он вставляет это как обычный текст. Иногда это нужно, иногда нет. В принципе, по ссылке он в любом случае, наверное, может перейти. Просто, когда мы вставляем ему ссылку, вот буквально как ссылку, мы ему как бы явно указываем эту ссылку, что по ней можно переходить.

Прежде чем мы разберём остальные режимы, давайте быстренько посмотрим, как работает агент, чтобы лучше это всё усваивалось. Попросим накидать его игру крестики-нолики в стиле брутализм. Ну, я не знаю, что он сделает за один промт, но давайте попробуем хотя бы для примера. Как нам это сделать? Э, мы можем вписывать сюда промт руками, а можем надиктовать. Это очень классная штука. А здесь есть иконка микрофона. Помимо того, что мы, в принципе, можем надиктовать сюда промт, он ещё может его и перевести сразу. То есть я могу сказать ему на одном языке, а он это переведёт на английский, допустим. Давайте посмотрим, как работает этот голосовой набор.

Сделай игру крестики нолики с дизайном в стиле брутализм. И пускай сверху будет отображаться счёт между крестиками и ноликами, счёт выигранных и проигранных игр. Вот здесь, кстати, можно выбрать язык. То есть на иконку вот этой звуковой волны, если тыкнуть, тут можно выбрать язык, на который будет переводиться промт. А у меня сейчас стоит английский, поэтому независимо от того, на каком языке я буду диктовать этот промт, он будет переводиться на английский. Нажимаю стоп. Как видите, он записал ещё то, что я наговорил сверху. Давайте, я удалю лишнее даже вот так и нажму Enter. Это весь промт. Честно, не знаю, насколько хорошо он с этим справится, но по идее он должен сейчас создать какие-то определённые файлы, и мы сможем их запустить. Хорошо, что он решил сделать простую HTML-страницу. По крайней мере, у нас не будет сейчас кучи лишних файлов, потому что нам это нужно для теста. Сейчас он с этим закончит, и мы посмотрим, что у него получилось.

О'кей, агент закончил создавать нам нашу игру. Давайте, перед тем, как мы её откроем, я быстренько покажу, что у нас здесь в чате есть. Ну, во-первых, можно посмотреть, какие файлы были отредактированы. Он, конечно, пишет это в чате, но помимо этого можно вот здесь снизу нажать на количество файлов, и у нас откроется список файлов, которые отредактировал ИИ агент. А если мы нажмём на какой-то файл, у нас он, в данном случае, создался один, то мы увидим изменения. Изменения в файле подсвечиваются зелёным. В данном случае он полностью с нуля создал файл, поэтому весь файл подсвечивается зелёным. Здесь мы можем либо нажать Keep, причём внутри вот этой вкладки с файлом, вот этой вкладки, я имею в виду, то есть внутри файла, мы можем одобрять или не одобрять конкретные блоки, которые он отредактировал. Ну, в данном случае это один цельный большой блок. Тут, в общем-то, выбрать не из чего, но имейте это в виду. Либо мы можем нажать на Keep File, тогда мы одобрим изменения во всём файле, либо мы можем нажать вот здесь вот Accept All либо Reject All. То есть Accept All примет все изменения во всех файлах. Reject All отменит все изменения во всех файлах. Ну неважно, давайте нажмём Keep File, просто чтобы он зелёным не маячил. Вот он у нас наш файл. Теперь мы можем открыть его в браузере. Это файл HTML, то есть простая HTML-страничка. И он всё запихал внутрь этой странички. Он прописал здесь стили, прописал здесь логику, да, вот здесь есть скрипты. Но пока что давайте в это не будем углубляться. Мы рассматриваем работу через нейронки, а не как устроен код. Поэтому написал и написал, молодец. Чтобы его открыть, мне нужно его найти в папке. И теперь я могу два раза на него кликнуть, он откроется у меня в браузере.

Ну, собственно, вот. Не знаю, брутализм это или нет, но жирные края, типа, наверное, часть. Короче, нормально. Такой минималистичный брутализм. Давайте попробуем сыграть. Крестик нолик, крестик нолик, крестик нолик, крестик победил. Win один. Потрясающе. Давайте Clear, а это всё почистит. Ну ладно, допустим, я ещё раз выиграл. А как заново-то играть-то? Reset game, да? Reset game. Если мы нажимаем, то у нас остаётся скор. И можем играть, собственно, дальше. Пока, ну, тут ничья. Ладно, неважно. Короче, он создал файл. Мы это всё делали ради того, чтобы просто посмотреть, как работает ИИ агент. В принципе, вот этот режим в чате, который называется Agent, работает примерно так: ээ, создаёт файлы, может их редактировать, мы можем попросить его дальше что-то сделать, но пока что мы этого делать не будем, чтобы сильно не отвлекаться. У нас ещё очень много информации. Просто имейте в виду, что в принципе это уже всё. Вот можно так работать. Просто включаете режим агента, начинаете писать какие-то свои запросы, он вам создаёт файлы или редактирует файлы. Вы можете открыть какой-то существующий проект, и он будет работать в нём. И, в принципе, вы уже можете так работать. Вот всё на этом моменте можно выключать видео и идти прикалываться с курсором. В принципе, так. Но помимо этого здесь есть много других классных функций, которые в целом этот процесс работы нам и упростят, и расширят. Поэтому пойдём дальше.

С режимом агента, в принципе, понятно. Ну вот он так работает. А давайте посмотрим, какие есть ещё режимы. Но перед этим, смотрите, мы сейчас сделали это в контексте одного чата. Вот он наш чат с ИИ агентом. Круто. Но здесь появилась иконочка заполненного контекста. Вот если на неё навести, то мы можем заметить, что 15% контекста у нас уже заполнено вот созданием этой игры. Соответственно, когда у нас контекст будет подбираться к концу, модель начнёт забывать какую-то информацию, начнёт галлюцинировать, может перестать учитывать важные какие-то факторы. Короче, бесконечно в одном чате работать, к сожалению, не получится. И вообще простое правило. Если вы закончили с какой-то задачей и хотите перейти к новой задаче, которая не требует вот этого предыдущего контекста, то есть вы как бы начали делать что-то новое, просто открываете новый чат вот здесь кнопочкой плюс, и у нас открывается новое контекстное окно с чистой историей сообщений. Тут вот контекст заполнен на 0%. И мы вот здесь вот начинаем уже делать что-то, какую-то новую задачу.

Эти чаты. Если вот здесь в настройках кликнуть и включить отображение агентов, они покажутся вот здесь вот в списке. То есть это как бы агенты. Вот он у нас агент, который Cross and Zeros, да, вот создал нам эту игру крестики-нолики. Всё, классно. Можем нажать новый агент. И по сути у нас вот точно так же открывается новый чат, как если бы мы нажали на кнопочку плюсика. Сейчас, правда, у нас скрылись отсюда вкладки, но это связано с тем, что вот эти вкладки теперь отображаются справа. Вот здесь. Если мы скроем вот этот блок агентов, то у нас эти вкладки снова покажутся. И по сути это и есть те же самые агенты. Честно говоря, я очень редко открываю вот этот блок с агентами. Мне удобнее без него. Он занимает место, без него места побольше. Но те же самые агенты вот здесь переключаются во вклад. О'кей, всё понятно.

Давайте посмотрим, что у нас ещё есть по режимам. Кроме режима агента у нас есть режим Plan. Это режим планирования. И отличается он от режима агента следующим. В режиме планирования курсор не начинает сразу внедрять задачу и делать какие-то действия. Он сначала составляет план действий, показывает вам его, и после того, как вы его одобряете, только тогда он начинает выполнять какие-то действия, которые вы от него ожидаете. Кроме того, что он сначала создаёт план действий, он ещё может задать вам какие-то наводящие вопросы, если у него они возникли. Допустим, вы дали ему какую-то неполную информацию, и тогда он уточнит, что вы имели в виду, как лучше это сделать, предложит какие-то варианты.

Давайте попробуем это сделать. Я включу вот режим планирования, он уже включен. Вместо того, чтобы давать задачу, я ему задам вопрос, ну, после которого предполагаю, что он что-то внедрит. Вопрос будет следующим. Смотри, у нас есть игра крестики-нолики, и я хочу как-то её улучшить, добавить какой-то новый функционал. Что ты можешь мне посоветовать и как мы будем это внедрять? Ну, допустим, вопрос тупой, конечно. Я не знаю, можно было бы что-то поумнее придумать, я не смог. Нажимаю Enter. Я надеюсь просто, что это, ну, как бы продемонстрирует процесс работы с вот этим планировщиком. Сейчас он подумает. Кстати, интересный момент. Ээ, здесь вы можете видеть его ход размышлений. Как бы вот он потом скрывается, но его можно открыть вот так и посмотреть, да, это его ход размышлений, да. Вот он думал 7 секунд, что-то там напридумывал. О'кей. Здесь в чём прикол? Вот тут в селекторе модели. Вы можете заметить, что есть модели с одинаковым названием, но у одной есть иконка мозга, а у другой нету иконки мозга. Вот разница как раз в вот в этом размышлении. То есть у меня сейчас включена модель SAN 4.5 с мозгом. Это значит, она будет размышлять. Это типа даст ей возможность дать какой-то взвешенный ответ, более взвешенный ответ. Если бы мы её выключили, она бы не думала, а просто вываливала вот с ходу, что у неё там нейроны в мозгу как срастились. Вот тот результат она бы сходу и нам выдавала. А с мозгом она типа подумает сама, может поразмышлять, оценить свои же мысли и потом уже какой-то более взвешенный ответ нам предоставить. По идее, это ещё и немножко дороже получается, потому что мы, кроме как на основной ответ, мы расходуем вот токены на размышление. Токены - это как бы единица обрабатываемой информацией нейронкой. Вот так. Это не обязательно какая-то буква, это может быть слова, предложения даже. В общем, какая-то единица информации у нейронки под капотом. А, короче, вот она нам что-то предлагает. Мы можем сделать AI оппонента, что достаточно сложно для нашей тестовой задачи. Предлагает также сделать визуальный индикатор победителя. Можно сделать Undo move, ну, типа отменить последнее действие. И ещё несколько каких-то предложений. Я не очень хочу сейчас в это сильно углубляться. Мы это разбираем только для примера. Хочу показать, как это работает. Напишу ему, давай сделаем Undo move. Вот всё, что я ему сейчас напишу. Посмотрите, как он будет сейчас действовать. Я вот выбрал какую-то опцию, и сейчас он начнёт создавать план внедрения вот этого функционала. У нас открылось окно с планом. Он его сейчас в реальном времени пишет. И когда он закончит его писать, мы сможем либо согласиться с ним, либо что-то дополнить. В данном конкретно случае он не задавал нам прямые вопросы. Вот здесь иногда отображается панелька с вопросами, уточняющими от него. Ну не прямые, а вот уточняющие вопросы. Например, как вы хотите конкретно это реализовать? В данном случае ему оказалось всё понятно, но в любом случае он создал план. Мы поможем по нему пройтись. Вообще говоря, посмотреть, что он там написал. Здесь он описывает логику внедрения, и если нас что-то не устроит, мы можем ему просто написать: "Давай сделаем по-другому". Сейчас я не буду это делать просто в целях экономии времени. Просто знайте, что так можно. То есть вот если вам что-то не нравится, просто пишите новый промт, что вам не нравится, и он будет корректировать план действий. В данном

случае я нажму просто build, и он сейчас переключился в режим агента и начал внедрять эти изменения. Пока он их внедряет, скажу следующее.

Режим планирования — классная штука. Я его достаточно часто использую. Когда мне нужно сделать какую-то большую задачу, либо если я не уверен в реализации, тогда я могу прямо спросить его, как вот сейчас примерно сделал, да, типа, как ты думаешь, как лучше сделать? Он может дать мне какие-то наводящие вопросы ещё до того, как ответит и сделает какое-то, ну, предложение, да, как можно что-то реализовать. Может, спросить: "А для чего тебе это вообще надо? Что ты хочешь? Как ты это видишь?" И так далее. После чего я уже с ним как бы соглашаюсь и о'кей, дальше мы начинаем с ним разработку.

Если задача какая-то супер маленькая, ну, типа поменяй заголовок, например, да, на странице, большого смысла использовать режим планирования нет. Если это, конечно, какой-то заголовок, который там связан с кучей других заголовков или ещё что-то, ну, может быть. Но, в общем, принцип вы, я думаю, поняли. Для простых задач это не обязательно. Но если вы хотите сначала как-то спланировать, как-то зафиксировать план действий или обсудить какое-то внедрение, то можете использовать режим планирования. В любом случае я советую вам просто попробовать этим попользоваться, и вы сами поймёте, в какой момент и для чего вам это удобно делать.

На текущий момент он внедрил нам какие-то батны. Давайте я снова открою нашу игру. Вот у нас тут появилась кнопка und move. Ну, допустим, бац работает прекрасно. Ну, крестики нолики достаточно простая в плане реализации программа, поэтому здесь он справился. Но и то молодец, как бы, всё в порядке. Ладно, мы сейчас не оцениваем какие-то умственные способности нейронки. Мы просто рассматриваем, какие режимы здесь есть. С планированием разобрались. Идём дальше.

Следующий режим, который мы разберём — это режим debug. Он помогает в исправлении каких-то ошибок, поиске проблем, ну и их устранении. Давайте посмотрим, как он работает. Откроем новый чат, выберем режим debug. И чтобы нам его протестировать, давайте что-нибудь сломаем. Например, удалим Wins Pattern. Предыдущие изменения мы согласимся с ними. Keepфаile нажмём. Это были изменения из последнего внедрения. Теперь мы удалили WS pattern. И если мы сейчас откроем эту страницу, то у нас на первый взгляд ничего не произойдёт. Мы можем даже как-то играть. Но заметьте, что у нас сейчас отображаются одни крестики. Нормальная ситуация. Давайте скажем нейронке, что у нас почему-то только крестики на экране. В чём-то, наверное, проблема. И посмотрим, как работает режим дебаг. Сейчас мы эту проблему создали искусственно, но в реальной ситуации такое тоже бывает, что где-то что-то удалилось случайно, где-то что-то сломалось и так далее. Давайте попросим нейронку это исправить. Посмотри на нашу игру крестики-нолики. Сейчас почему-то у нас отображаются только крестики. Всё, нажимаю Enter. Пускай нейронка подумает и скажет нам, в чём может быть проблема.

Курсор предлагает несколько гипотез. Причём он сразу обратил внимание на win Patterns, что у нас нету этой переменной, и начал даже что-то исправлять. А на самом деле даже не исправлять, а он сделал гораздо более хитрую штуку. Он добавил отслеживание нажатий и хочет посмотреть логи, которые будут, когда мы будем нажимать. То есть отслеживать, какие действия происходят, как это отражается на коде. Давайте попробуем. Я открываю наши крестики, нолики, понажимаю здесь какие-то крестики везде, допустим, да, и можем заметить, что здесь была пустая колонка баг логов, а теперь она уже полная. Дальше он нам предложил следующие шаги, собственно, открыть наш файл, прокликать на три-четыре ячейки, убедиться, что только крестики у нас отображаются, и нажать процессе. То есть мы дали ему какие-то логи, тем самым, что мы понажимали, а он их отследил. И говорим, что да, мы это сделали. Сейчас он посмотрит, что не так, и, по идее, должен исправить нам нашу ошибку.

Смотрите, что он сделал. Он проанализировал логи, сказал, что все гипотезы подтвердились, и начал исправление. И теперь он предлагает заново проделать те же самые шаги. Также он отследит логи и посмотрит, всё ли он исправил. Давайте это сделаем. Я открываю заново страницу, кликаю. У нас появились нолики. Всё классно, крестики выиграли. О'кей. Открываем заново курсор. Говорим, что мы это сделали. Сейчас он посмотрит и проверит, действительно ли исправлена ошибка. Исправление он подтвердил, и теперь он удаляет лишние логи, которые были добавлены для отслеживания проблемы. Если вы вдруг не знаете, что такое логи, то, по сути, это какая-то запись о каком-то действии. Вот он просканировал все вот эти действия, которые произошли, посмотрел, что всё исправлено, и говорит, что всё нормально, фиксит. Заметьте, что в конце, вот если мы нажмём на наш файл и посмотрим на изменения, всё, что он сделал, это добавил Win Patterns, который мы изначально удалили. Мы с этим соглашаемся. Ну, кроме этих изменений здесь больше ничего нету. Согласимся, всё классно, наша игра снова работает. А вот примерно так работает режим дебага. Достаточно полезная штука. Если вы столкнулись с какой-то проблемой, он не просто пытается сразу решить проблему, а он сначала пытается отследить, в чём было дело. И когда он понял, в чём конкретно проблема, он её исправляет. И лишний код, который он для отслеживания добавил, он его тоже удаляет. О'кей, с режимом дебага мы разобрались.

Остался последний режим — это Ask. На самом деле режим, наверное, самый простой. В этом режиме нейронка просто ничего не делает. Ну, в плане не выполняет конкретных действий, а просто отвечает нам на запросы. По сути, работает как обычный чат с нейронкой. Ну, допустим, в том же чате GPT. То есть мы туда что-то пишем, он нам что-то отвечает, но никаких изменений в файлы он в этом режиме не вносит. Но, естественно, у него есть доступ к файлам. Он может посмотреть на них и, основываясь на коде, который он нашёл, нам что-то рассказать. Этот режим можно использовать, если вы не хотите ничего внедрять, а просто хотите позадавать вопросы. Может быть, вы подключились к какому-то новому проекту, и вам нужно разобраться с кодом, как он работает. Тогда вот включаем режим ask, задаём вопросы, курсор смотрит на код и отвечает нам на них.

О'кей, с режимами разобрались. Что здесь есть интересного? Помимо того, что мы можем писать сюда промты, мы также можем прикреплять сюда изображения, и нейронка будет их анализировать. Допустим, сделаем скриншот страницы курсора. Я его скопирую, этот удалю, вставлю. Появилась иконка изображения, ну, превьюшка. И давайте попросим его обновить дизайн наших крестиков-ноликов, чтобы он соответствовал скриншоту. Я пишу ему update design to match the image style. Ну, то есть обновить дизайн, чтобы соответствовать стилям изображения.

Смотрите сразу, во-первых, мы переключаемся здесь в режим агента, потому что в режиме ask он ничего делать не будет. Во-вторых, помимо того, что сюда можно добавлять изображение, сюда в контекст можно перетаскивать также файлы. То есть делается это следующим образом. Мы берём наш файл, допустим, мы точно знаем, что нам нужны изменения в этом файле, и мы можем просто его вот так сюда перетащить, и он появится в контексте нейронки. То есть нейронка сразу будет знать, что нам нужно редактировать вот этот файл. Ну либо посмотреть на этот файл, если мы даём его в качестве референса. Короче, мы сразу указываем, что с этим файлом нужно взаимодействовать. Это достаточно удобно, особенно если файлов в проекте много, и вы ещё и в них разбираетесь, да, что какой файл за какие функции отвечает. Тогда вы можете напрямую давать в контекст нейронки файл и тем самым облегчите ей задачу, чтобы она не искала его по всему проекту.

Кроме файла можно также давать конкретные строки. Допустим, мы бы хотели изменить конкретно вот этот блок, ну либо конкретно логику. Вот скрипт отсюда возьмём, да, выделим вот так вот весь скрипт. То есть это уже не весь файл, это часть этого файла. Здесь у нас всплывает подсказка, что можно добавить это в чат и можно отредактировать с помощью горячих клавиш. Добавить в чат Command L, отредактировать Command I. Кроме того, если мы прокрутим вот так вот вниз до конца выделения, здесь будут кнопки добавить в чат или Quick Edit. Если мы нажимаем Quick Edit, то у нас открывается окно для запроса нейронки прямо вот здесь в файле. И мы можем попросить здесь что-то изменить. Сейчас мы этого делать не будем, но если фикс какой-то быстрый, то можно не пользоваться окном чата, а написать это здесь. А также здесь есть выбор модели. По умолчанию вот он стоит авто, но мы можем выбрать какую-то другую. Причём здесь точно так же можно добавлять модели, но отображаются вот в этом быстром редактировании они не все. Скорее всего, отображаются какие-то простые модели. Ну, можно поставить и авто. То есть это предполагается, что какое-то простое редактирование. Также здесь можно выбрать, что мы хотим сделать, либо отредактировать, либо вопрос. То есть, по сути, это режимы агента и режим ask. Если мы хотим задать вопрос, например, как это работает, давайте это сделаем. How it works? Спросим его. Он сейчас подумает и даст нам ответ о том, как это работает. В общем, вот он нам ответил. Сейчас нас это мало интересует. Мы также могли бы попросить его что-то отредактировать, если бы мы выбрали режим section. Но показать я хотел вам не только это.

То есть, допустим, давайте заново выделим скрипт. Если мы сейчас его скопируем, то мы можем вставить его в окно нашего чата. Нажимаем Ctrl V. И, пожалуйста, у нас прикрепился не просто файл, а файл с конкретными указаниями строк. То есть со 196 по 310. Это вот как раз те стройки, которые мы с вами выделили. Это можно сделать так, либо можно нажать на кнопку, ну неважно. Вот опять мы выделяем. Мы можем нажать на эту чат. И обратите внимание, точно также это добавляется в чат. О'кей. Сейчас нам это не нужно. Давайте просто перетащим сюда целиком файл. Редактировать нам нужно его полностью, а не только логику его работы. И нажмём Enter. Что я хочу этим показать? Что нейронки умеют работать с изображением и то, что можно перетаскивать в контекст чата какой-то файл либо строки определённые, да, и с файлом. Сейчас нейронка проанализирует изображение, выявит оттуда какие-то стили и обновит стили нашей игры в крестике нолики, чтобы они были похожи на то, что она увидела на скриншоте.

Что-то курсор подредактировал. Давайте посмотрим, что у него получилось. Заново откроем файл. И как вы можете заметить, да, у нас поменялись стили. Ну, я бы не сказал, что они прямо идеально соответствуют тому, что мы видим здесь, но некоторых элементов курсор просто не нашёл. Цвет очень похожий на кнопку download. Вот этих краёв синего и красного на скриншоте не было, но он их почему-то решил добавить. Но в любом случае цвета у нас похожи на кнопку download, например, вот эти заголовки похожи. Ну и бэкграунд тоже вроде соответствует. Короче, в целом он понял, если мы хотим что-то подредактировать, мы можем отдельно ему написать. Например, убери края у карточек счёта. Ну, например, или что-нибудь такое. Сейчас мы этого делать не будем. Э, что вы и так уже поняли. Просто пишется здесь дополнительно следующий промт, что убери, пожалуйста, края. Либо можно открыть новый чат, поскольку нам, по большому счёту, предыдущий контекст вроде как не нужен, нам просто нужно края убрать. Можно было бы это сделать в новом чате. Подробнее про контекст, про работу с контекстом, как мне втыкаться в лимиты и как его оптимизировать, я снимал вообще отдельное видео. Если захотите, можете его посмотреть. Ссылка будет в описании. Сейчас прямо сильно глубоко в это копаться не будем, но просто имейте в виду, что можно упереться в лимит контекста в одном чате. Ну и, конечно, есть лимиты в целом на подписке. И, грубо говоря, когда мы сейчас отправим сюда новое сообщение, курсор в нейронку отправит не только последнее сообщение, но и историю сообщений, которая здесь была. Да, что-то он кэширует, но в любом случае это больше объём информации, чем если бы мы написали ему это с нуля. Хотя здесь, конечно, спорный вопрос в том плане, что если бы нам нужен был вот этот контекст и нейронка в любом случае начала бы его искать, то здесь он был бы закэширован. А если бы мы открыли новый чат, то этого кэша бы не было, и он бы то же самое взял бы в контекст. Только эти данные не были бы закэшированы, соответственно, оценились бы дороже. Но это уже не тема данного видео, на самом деле. Я бы не сказал, что это прямо супер сейчас важно и можно этим пока что не заморачиваться.

Что ещё умеет агент? Я уже упоминал, что он умеет ходить по ссылкам. То есть в данном случае мы скинули ему скриншот страницы, но мы могли бы скинуть ему ссылку. на страницу курсора. Кроме этого, он умеет запускать команды в терминале. Давайте на это тоже посмотрим. Во-первых, я удалю наши крестики нолики, которые нам сейчас уже не нужны, и напишу ему простой промт. Create a NextJS Project. Нажимаю Enter. Я надеюсь, что он сейчас сможет инициализировать проект на NextJS. NextJS — это такой фреймворк для разработки веб-приложений, веб-сайтов, основанный на Реакте. Хорошо, если вы поняли то, что я сейчас сказал, но если нет, то постараюсь очень просто объяснить. Framework — это набор инструментов и правил для создания чего-то, например, приложения или веб-сайта. А React — это такая библиотека. В общем, тоже набор определённого функционала, э, который можно использовать для разработки фронтенда, то есть пользовательского интерфейса. Вот всякие кнопочки, карточки, вот это всё, это фронтенд. То, что вы видите, все вот эти вот элементы — это пользовательский интерфейс. О'кей, посмотрим, что у нас происходит сейчас в нашем курсоре. И можете обратить внимание, что курсор начал уже выполнять наше задание. Он уже запустил какую-то команду. Запустил он её без спроса, потому что она у меня разрешена для выполнения. Сейчас покажу, где. А команда вот эта у меня, похоже, не разрешена. Я её разрешаю выполнить. И он, по сути, в терминале выполняет эти команды, которые инициализируют какие-то процессы.

Здесь сейчас произошло следующее. Он попытался выполнить команду, которая инициализирует проект на NextJS, но он не смог её сделать, потому что у нас папка была не пустая. У нас в этой папке была другая папка курсор, и это помешало ему инициализировать проект. Поэтому сейчас я пока что отменил то, что он делает. Я нажал здесь на стоп, и он просто прекратил всё выполнение. Сейчас он не закончил создавать нам проект на NextJS. Здесь есть два варианта. Ну, во-первых, я сейчас просто всё это удалю, потому что мне это не надо. И я хочу, чтобы он сделал это заново в текущей папке. Кстати, здесь у нас открыта вкладка с планом, который мы когда-то создавали. Он нам больше не нужен, его можно просто закрыть. А, смотрите, да, вот два варианта. Либо вы инициализируете проект в пустой папке. Вот сейчас у нас тут ничего нету. Папка точка курсор на самом деле создаётся автоматически курсором в определённые моменты времени. Мы к ней скоро вернёмся. Это интересная папка, в ней очень много всего можно сделать, но пока что она нам не нужна. Поэтому я сейчас всё удалил, попробую заново попросить курсор это сделать. По идее, у него сейчас должно это получиться. Я не хочу это вырезать, потому что это достаточно частая проблема. То есть, если вы в папке, в которой вы работаете, уже создали какие-то файлы и просите нейронку инициализировать в ней что-то, то она в первую очередь идёт выполнять какую-то вот команду для инициализации с нуля проекта. И это правильно, это хорошая команда, но эта команда выдаёт ошибку, если в этой папке уже что-то находится. Ну, по крайней мере, может выдать ошибку. Нейронка видит эту ошибку и пытается создать её по-другому, то есть, ну, своими силами, да? То есть сейчас что произошло? По сути, курсор выполнил одну команду, и у нас подкачались все нужные файлы для того, чтобы запустить проект. Если эта команда не сработала, он пытается эти файлы создать самостоятельно с нуля. Он может это сделать, но гораздо лучше инициализировать проект официальной командой. Если мы зайдём сейчас на сайт вот этого NextJS, нажмём get Started и где-то здесь мы, наверное, вот эту installation, да, мы найдём примерно эту же команду. У нас использовался npm, пакетный менеджер. Вот эта команда NPX Create, next up и так далее. Посмотрим. Вот эта команда. Дальше идут определённые параметры, он их прописал, чтобы их не выбирать вручную. Если мы ведём эту команду вручную, то нас в терминале команда спросит конфигурацию, которую мы хотим создать. Здесь курсор просто прописал параметры, чтобы на эти вопросы не отвечать, и сразу дать понять, какую конфигурацию нужно выполнить. Обратите внимание, сейчас у него это получилось. То есть вот он сделал. И вот второй вариант, про который я сначала не рассказал. Если вы уже начали что-то делать в этой папки, возможно, создали какую-то документацию, про которую мы чуть позже поговорим, или что-то ещё, ну, в общем, у вас есть другие файлы, то, скорее всего, вот такой командой курсор инициализировать приложение не сможет и начнёт это делать вручную. Мне не очень нравится, когда он это делает вручную. То есть, да, он может это сделать и даже всё заработает, но мне приятнее понимать, что я выполнил официальную команду. Ну, точнее, нейронка выполнил официальную команду, и всё установилось так, как там прописано. Поэтому в таком случае можно просто создать новую папку, в которой будет непосредственно ваш проект. Например, здесь бы ничего этого не было, были бы какие-то другие файлы, и можно было бы здесь создать папку, например, web или app или что-то ещё. Ну, то есть папку непосредственно с кодом нашего приложения. Здесь в корневой директории вот этого проекта у нас были какие-то другие файлы, а непосредственно само приложение лежало бы в этой папке, например, app или web или неважно, как угодно это можно назвать. И в той папке он бы смог это прекрасно инициализировать, потому что она была бы пустая. Можно использовать такой вариант, неплохой, кстати, нормальный вариант. Либо сделать так, а после этого попросить нейронку скопировать все файлы из той папки в корневую директорию. Если вы всё-таки хотите, чтобы у вас всё это находилось в корневой директории, тогда нейронка сможет выполнить официальную команду установки. И если вам нужно, чтобы это всё было в корне проекта, а у вас там уже есть какие-то файлы, то просто она переместит и всё будет вот так, как вы хотите.

Смотрите дальше, что. Во-первых, да, курсор выполнил команды в терминале. Круто, мы это продемонстрировали, можно посмотреть. Дальше он нам предлагает запустить сервер, чтобы у нас проект заработал, чтобы он открывался в браузере. Нам нужно запустить сервер. Просто так HTML-страничку мы не можем перетащить в браузер, если мы работаем с фреймворком NextJS, потому что, ну, в нём гораздо больше функционала, чем просто отображение статичной страницы. О'кей, давайте это сделаем. Во-первых, можно, в принципе, попросить его сделать это, запустить, но на всякий случай покажу другой вариант. Вот здесь мы нажимаем show terminal, либо вот здесь терминал new terminal, либо комбинацию клавиш Command J. Ну, у вас тут будет ваша, соответственно, комбинация клавиш. О'кей, открывается терминал, и мы просто берём и запускаем нашу команду. Окей. NPM run dev. Мы запускаем сервер тем самым для разработки. Обратите внимание, у нас открылся браузер вот здесь в курсоре. Пока что он ничего здесь не выводит, но если мы откроем нашу страницу в браузере, то у нас должна открыться страница. Ну вот стартовая этого фреймворка NextJS. Круто. Это уже хорошо, это работает. На этом можно писать уже какие-то более сложные вещи, чем просто крестики нолики. Тут ещё стоит добавить, что чтобы включить браузер самостоятельно, для этого нужно нажать вот здесь на три точки. И тут есть пункт open browser. Чтобы у нас открылась эта страница в браузере. Ну, во-первых, можно попробовать просто обновить, но что-то у нас это не получается. Либо вот HTTPS. Здесь это может быть сложно, но, короче, это два разных протокола: HTTP и HTTPS. Нам нужно это стереть. А, букву S либо просто вот так вот скопировать то, что он выдал. Наверное, так будет проще. И вставить. И оно должно, э, не знаю, почему у меня не открывается эта страница. Э, реально загадка, но, в принципе, вы можете скопировать вторую ссылку, вставить её. Ну вот, у меня она открылась. Не знаю, скорее всего, у вас и первая откроется. Может быть, я в настройках что-то подкорректировал, не знаю. Но в любом случае браузер работает. Причём браузер работает не только с нашими локальными сайтами. Это обычный браузер. Мы можем здесь написать, например, Google.com. И Google.com тоже откроется здесь. Правда, он у нас спрашивает, не робот ли я, и мне придётся проходить капчу. Но в любом случае можно заметить, что страница открывается. О'кей. После того, как я прошёл капчу, у меня всё открылось, всё прекрасно, но Google нам сейчас не нужен. Давайте вернёмся к нашему сайту. Я буду использовать вторую ссылку, потому что у меня первая не открывается по непонятным причинам. При этом в обычном браузере всё нормально. Вот localhost 3000, а здесь почему-то нет. Если вы знаете, из-за чего это происходит, то напишите, пожалуйста, в комментариях. Я думаю, кому-то это может пригодиться. Так вот, это наша страница. Всё круто. Вернёмся к нашей программе. В общем, что я хотел этим сказать? То, что курсор умеет работать с терминалом. На самом деле это всё было вот про это. То есть он может запускать команды, а благодаря запуску командам у него достаточно много, на самом деле, возможностей есть. Если вы никогда с этим не сталкивались, то через терминальные команды, в принципе, можно делать, ну, практически всё, что угодно. Конечно, без спроса он их выполнять не будет. Он будет спрашивать, можно ли я выполню какую-то команду. По крайней мере, пока вы ему не разрешите её выполнять всегда. Во-первых, когда он спрашивает, там можно выбрать типа всегда разрешать. А во-вторых, вот здесь в настройках курсора во вкладке агентов есть такое поле Command Allow List. Собственно, можно увидеть, что здесь есть команда NPX, которую курсор выполнил, и у меня она находится в разрешённом листе. То есть он может её выполнять, не спрашивая разрешения. По умолчанию он будет спрашивать все команды, поэтому просто так он выполнять их не будет. Вы должны их одобрить сначала, тогда он сможет её выполнить. О'кей. Это я к тому, что не нужно переживать в плане там безопасности. Вы всегда можете ему запретить что-то сделать, но потенциально возможности у него есть очень большие благодаря тому, что он может выполнять команды терминала, и ему это даёт очень много возможностей. О'кей, с терминалом понятно.

Ещё что я хотел показать. В контекст можно кидать не только файлы, как я уже показывал, можно скидывать целые папки. Пожалуйста, теперь в контекст мы добавили всю папку src. Кроме этого, мы можем скидывать туда какую-то информацию из терминала. То есть в данном случае у нас всё хорошо. Если бы здесь была какая-то ошибка, то мы могли бы её вот так вот выделить, нажать to chat. И информация из терминала добавилась бы в наш контекст, при этом с указанием того, что это информация из терминала, а не просто список строчек с символами. Также мы можем содержимое терминала скопировать и вставить в чат. И аналогичным образом эта информация добавится в контекст с указанием, что это информация из терминала. И опять же, если вы не хотите, чтобы курсор помечал это как информацию из терминала, вы хотите просто текстом вставить, тогда копируете и вставляете не Ctrl V, а Ctrl Shift V, ну или Command Shift V. И тогда у вас вставляется обычный текст.

Едем дальше. Давайте для примера скинем ему какую-то ссылку, допустим, тот же cursor.com. И давайте попросим нейронку сделать header такой же, как на этой странице. Я вставил ссылку и прошу его сделать на вбаршем проекте, такой же, как на этой странице. Нажимаю Enter и поехали. На самом деле, да, это можно назвать навбаром, то есть плашка навигации. Ну, можно было бы и хедером назвать, не суть важно. А дальше происходит, что курсор спрашивает меня: "Можно ли мне посетить этот сайт?" И я ему разрешаю. Курсор сделал нам NAFB. И, конечно, это не совсем то же самое, что мы видели на странице. Ну, по крайней мере, заголовок и кнопочки похожи. То есть он взял оттуда информацию. Такое бывает. Есть у меня предположение, что когда мы даём ему какие-то ссылки, он скорее смотрит на содержимое, но он не анализирует визуал. Если мы хотим, чтобы он точно совпадал визуально с хедером из курсора, мы можем сделать скриншот, вставить сюда и попросить сделать его такие же стили. О'кей, нажимаю Enter. Сейчас посмотрим, насколько хорошо он это поймёт. Курсор закончил с изменениями, обновил нам навбар и даже заголовок написал, как у нас на скриншоте. И даже кнопочку сделал, постарался добавить какие-то иконки, но иконки он делает скорее криво, чем нормально. Он просто сам их рисует. Иногда это

Похоже, иногда нет, но сейчас нас это мало волнует. Конечно, это не идеально. Это не один в один, точь в точь, что на странице. Для этого, во-первых, можно было бы более детально ему это описывать, например, не только про навбар писать, но и в целом. То есть возьми такой же фон со страницы, такие же кнопки, всё то же самое. То есть прямо по пунктам ему это описать. Но сейчас я пока что не буду в это углубляться.

Сейчас я вот что хочу показать. Вот он сделал какие-то изменения. Допустим, он сделал изменения, которые нам не нравятся. И что нам делать? Благо, в курсоре есть чекпоинты. Вы можете заметить, что напротив сообщений, которые мы отправляли, если за ними шли какие-то изменения, есть иконка стрелочки. То есть мы можем откатиться к этому месту. Если мы сейчас на неё нажмём, у нас спросит курсор: "Вы точно хотите откатиться к этому чекпоинту?" Да, это называется чекпоинты. Мы нажимаем "Да". И он отменяет все действия, которые он сделал после этого сообщения. На самом деле, это очень удобно, и в процессе работы это часто пригождается. Если мы просим нейронку что-то сделать, и она делает не совсем то, что нам нужно, мы можем откатиться и, например, поменять промт, дописать как-то более подробней, что мы хотим от него, чтобы он сделал.

Допустим, я напишу ему более подробный промт с просьбой обновить не только навбар, но и всю страницу, чтобы она полностью соответствовала тому, что он видит на скриншоте. И давайте попробуем отправить ему этот промт, посмотрим, что у него получится. О'кей. Он обновил страницу. Ну да, это не идеально то, что мы хотели. С этим, в принципе, можно дальше разбираться. Просить его обновить заголовок, просить его обновить фон, если это требуется. Ну, по-моему, да, фон отличается у страницы и так далее. Уже идти по каждому компоненту.

И, кстати, давайте прямо здесь я покажу вам одну прикольную фишку с браузером в курсоре. Пока что скроем терминал, чтобы он нам не мешал. Здесь есть кнопочка, символизирующая выбор элемента. И если мы нажмём на неё, то мы можем выбрать какой-то элемент. Вот он подсвечивается, обводится. Например, заголовок. Если мы нажмём на заголовок, обратите внимание, что в контекст нашего чата добавился этот заголовок. И теперь мы можем написать какой-то промт с просьбой сделать его меньше. Но кроме этого, что я ещё хочу вам показать. Ну, это, я думаю, вы, в принципе, поняли, да? По аналогии с контекстом, что мы скидывали файлы, ссылки, что угодно, можно ещё и вот так вот напрямую заголовки или какие-то другие элементы на странице скидывать в контекст.

Кроме этого, если мы откроем здесь вот эту панельку правую, вы можете увидеть здесь какие-то параметры выделенного элемента, и их можно поменять. Допустим, здесь есть параметр текст. У нас выбран шрифт "er". Мы можем выбрать какой-то другой шрифт. Он сразу здесь меняется визуально. А также можем выбрать размер этого шрифта. Допустим, сделать его меньше. Допустим, сделать таким. Также мы можем подредактировать высоту строки. Ну, допустим, предположим, нас вот это устроило. Что сделать, чтобы оно сохранилось? Очень просто. Для этого можно нажать кнопочку "apply". После чего все эти изменения отправляются в сообщении к нейронке, и нейронка меняет значение в нужных местах. Просто взять и сохранить это мы не можем, потому что здесь мы видим то, что в итоге получается, да, размер текста, размер шрифта, но под капотом в коде формироваться эти параметры могут по-разному. Это могут быть какие-то переменные, которые используются и в других местах, или какие-то классы со стилями, которые используются в других местах. Поэтому мы отправляем это всё в нейронку с помощью кнопки "apply", после чего нейронка меняет нужные стили, и у нас, по идее, должны отображаться наши стили здесь.

А сейчас у нас пока что ошибка. Давайте попробуем перезагрузить страницу. Это не помогает. А, ничего страшного. Можно сделать следующее. Либо воспользоваться режимом debug. Но в данном случае, я думаю, можно просто скопировать ошибку либо нажать вот. А здесь не нажимается. Ну, значит, просто скопировать ошибку, вставить её нейронке в чат, нажать Enter, и она сейчас должна её пофиксить. Ну, это достаточно просто. Мы могли бы, в принципе, выделить вот так вот. А, нет, не могли бы. Ну, могли бы выделить вот так "next portal", да, то есть это целиком вся страница. В принципе, так бы тоже прокатило. Нейронка бы увидела сообщение ошибки и исправила бы его.

Итак, сейчас страница у нас сломалась. Давайте попробуем обновить. Не получается. Давайте посмотрим, что у нас в консоли. Возможно, нужно просто перезапустить сервер. Давайте это сделаем заново. Запускаю ту же самую команду "npm run dev". Попытаюсь обновить. Пока не получается. Теперь у нас отображается ошибка "404 not found". Дело в том, что курсор нашёл какой-то дубликат файла. Теперь можно, в принципе, ему просто всю эту ошибку вот так вот дать. Нажать на самый верхний компонент, ну, то есть который объединяет в себя всё остальное и скинуть ему. Посмотрим, насколько он это поймёт. На крайняк мы можем просто откатить это до предыдущего шага. Курсор почистил какие-то дублирующиеся файлы. Хотя, конечно, странно, что они реально дублировались, потому что всё, что мы сделали, это, по сути, инициализировали Next.js проект. Но на удивление, я думал, он всё сломал, а действительно заработало. То есть стили применились. Может быть, реально в какой-то момент там создались дубликаты. Не понимаю, в какой момент это могло произойти, но тем не менее сейчас работает. И обратите внимание, что заголовок он исправил.

Помимо просто размера текста здесь, на самом деле, есть достаточно много разных параметров, которые можно подвигать. Например, если мы выделим целиком контейнер, то здесь мы можем задать ему какие-то отступы внутренние, по горизонтали, по вертикали. Если вы работали в Figma, то некоторые элементы здесь похожи на то, что у нас есть в Figma, например, мы можем работать с лейаутом, выравнивать их по-разному. И при этом редактировать какие-то отступы. Например, вот здесь мы можем подредактировать отступ между текстом и кнопкой, если мы её так выровняем. Ну либо наоборот. И опять вот этот отступ между текстом и кнопкой мы можем подправить. Сейчас я отменю всё то, что я сделал. В принципе, мне это не было нужно. Пока что оставим это как есть.

К чему сейчас я всё это рассказывал? К тому, что здесь есть браузер прямо внутри курсора. Кроме того, что в браузере можно открывать страницы, которые мы сами же и создавали, здесь можно открывать внешние страницы. Например, мы можем открыть тот же самый cursor.com. Отлично, у нас открылась эта страница. И вместо того, чтобы делать скриншоты или скидывать ссылку, мы можем буквально дать контекст какой-то компонент из этой страницы. Например, мы можем выделить вот так вот этот блок с карточками. Он уже добавился в контекст. И давайте попросим курсор добавить этот блок на нашу страницу. Максимально простой промт: "Добавь этот блок на нашу страницу". Давайте посмотрим, насколько он хорошо это поймёт. По крайней мере, в таком варианте у него есть не просто визуальная картинка и не просто ссылка, по которой он, скорее всего, в основном содержимое смотрит, а не визуал, а у него есть всё вместе. Он видит как содержимое, так и стили этих элементов, которые вот здесь, собственно, тоже можно просмотреть частично.

Давайте посмотрим, что он сделал. Карточки он типа добавил, но в стиле, конечно, не прописал. Можно его, кстати, попробовать об этом попросить. Здесь у нас съехало межстрочное расстояние. На самом деле даже не оно, а размер шрифта почему-то съехал. Сейчас он 59 пикселей, а должен быть 24, например. Да. Возможно, курсор просто не уловил, что и где нужно поменять. Давайте сделаем это ещё раз. Когда он это последний раз редактировал, у нас обнаружились какие-то дубликаты. Давайте посмотрим, сможет ли он сейчас это исправить. Итак, кажется, он это внедрил. Если обновить страницу, то всё отображается корректно. Давайте попросим сделать такие же стили у наших карточек, как и здесь. Снова выделим этот блок, он добавился в контекст, и напишем ему простой промт с просьбой сделать такие же стили карточек, как у нас на странице. Мы могли бы перейти в нашу вкладку и добавить ему эти карточки также в контекст, но, честно говоря, надеюсь, что он меня поймёт. Он меня не понял. Сделаем проще. Скинем сюда в конец промта карточки вот эти. А в начало промта скинем карточки наши вот эти. А только они добавляются в новое сообщение, а я их буду вырезать и вставлять в промт. Посмотрим, получится ли сейчас. Не получилось.

Что если мы скинем ему папку с нашим проектом? Дальше он уточняет, что конкретно мы хотим подредактировать. Я ему напишу: "same background, border-radius, sizes". Ну, почти частично он это сделал. Фон карточек он нам не сделал. Бордеры на самом деле здесь тоже есть, если приглядеться. Возможно, сейчас он нам это сможет исправить. Предложил три варианта, и нам нужно определённо точно такой же фон. Поэтому я выбрал третий. Первый вариант был какой-то стандартный, серый, второй — прозрачный, и третий — точно такой же. Я хочу, чтобы он буквально взял оттенок из нашего референса. Короче, курсор попытался, но в упор меня не понимает. Здесь можно было бы ему скриншот приложить. Давайте посмотрим. У этой карточки есть бэкграунд. Можно его скопировать и на нашей странице выбрать карточку и в разделе "Background" вставить этот оттенок. Ну, типа так. Нажать "apply". Возможно, он сейчас нас поймёт, но сильно мы сейчас в это углубляться не будем. Короче, с браузером здесь можно развлекаться. Не всегда он хорошо понимает, но ничего страшного. При большом желании результата от него можно добиться. Это нормально, что приходится уточнять какие-то моменты, но сильно сейчас в этом застревать я не хочу. У нас ещё достаточно много материала. На этом можно пока остановиться с браузером.

Если коротко теории сейчас дать, то можно было бы делать немножко другим способом: брать сначала референс с нужного сайта, просить нейронку описать все стили, точно один в один, которые она видит на этом сайте. После того, как нейронка описала досконально все эти стили и у неё это зафиксировано, можно было бы просить уже внедрить вот соответствующие элементы на наш сайт. Скорее всего, это сработало бы лучше. Браузер курсора всё-таки не главный герой сегодняшнего видео, поэтому с ним мы пока что закончим. Просто имейте в виду, что он есть, с ним можно работать, можно просить нейронку что-то менять, можно корректировать руками стили каких-то элементов. Нейронка потом отредактирует их в коде. Иногда это получается сразу идеально, иногда это не так. Но нейронка — дело такое, с ней часто приходится что-то докручивать, допиливать, просить что-то доработать, поменять. В общем, шлифовать достаточно часто приходится. В этом нет ничего криминального. Всё о'кей.

С какими-то базовыми функциями мы почти закончили. Есть пара моментов, которые я хочу отметить, прежде чем мы перейдём к более углублённым настройкам и темам. Во-первых, по поводу чекпоинтов. Да, мы можем откатываться к чекпоинтам в контексте одного чата, но если у нас было несколько чатов и мы хотим откатить какие-то изменения, то нам либо придётся в каждом чате последовательно вот так откатывать, либо я даже не знаю, что произойдёт, если мы сейчас откатимся к какому-то изменению из старого чата. То есть удалит он там часть кода, а часть из других чатов оставит или вообще всё потрёт. Но в любом случае это вызовет определённые трудности, если мы хотим сразу откатить какой-то большой объём изменений. И вообще говоря, чекпоинты, ну, не совсем на это рассчитаны. То есть чекпоинты можно использовать в рамках одного чата, если нейронка что-то сделала, и нам сразу это не понравилось. Но если мы хотим более гибко управлять состоянием проекта, то здесь нам нужен Git. Git — это как чекпоинты на стероидах и даже больше. С помощью Git можно очень гибко управлять состоянием проекта, создавать какие-то параллельные ветви развития, тестировать в них новый функционал, потом вливать их в основное состояние проекта, либо наоборот откатываться. Короче, про Git есть отдельное видео, и его однозначно стоит посмотреть, если вы собираетесь сделать хоть какой-то более-менее серьёзный проект. Даже если это просто лендинг page, вам уже нужен Git. Это однозначно. Поэтому посмотрите, оно вам будет очень полезно.

Кроме Git, что ещё хочется отметить? Вот здесь в настройках, в Cursor Settings, во вкладке General в самом низу есть один параметр, который называется Privacy. И тут можно включить privacy mode, то есть не отправлять свои данные для улучшения работы курсора, скажем так. И я советую его всегда ставить. Здесь есть два варианта: это "share data", то есть помогать курсору улучшать его функционал, либо включать "Privacy mode". Если вы работаете с какими-то чувствительными данными, то privacy mode включать однозначно нужно. Да и, честно говоря, даже если нет, то всё равно включите. Этот выбор доступен только на платных подписках. На бесплатном аккаунте всегда включен режим "Share Data" без возможности его поменять. Также здесь есть раздел с уведомлениями. Можно включить звуковые уведомления, когда агент закончил работу. Иногда это удобно, у меня сейчас они выключены. И также можно включить системные уведомления, когда агенту какое-то ваше внимание, например, одобрить выполнение команды.

С базовой информацией закончили. Сейчас перейдём на, так сказать, advanced level. Он будет уже посложнее для восприятия, если вы первый раз в жизни видите эту программу. Но однозначно вам рано или поздно пригодится, если вы будете продолжать в ней работать. Во-первых, как вы могли заметить, нейронки не всегда делают то, что мы от них хотим, и это в целом нормально. Но чтобы повысить качество их работы, есть определённые методы, скажем так. На самом деле всё так или иначе сводится к управлению контекстом. Контекст — это та информация, которая доступна нейронке в рамках одного диалога. Грубо говоря, это так. Отчасти мы уже столкнулись с вами с темой управления контекстом, когда мы добавляли в чат нейронки какие-то файлы или элементы из браузера, тем самым мы давали в контекст нейронки какую-то дополнительную информацию, ну или изображения, или ссылки. В общем, да. Но помимо того, что можно просто добавлять в чат какую-то информацию, есть у курсора дополнительные возможности, которые упрощают работу с контекстом за пределами просто диалогового окна. Давайте разбираться, какие способы для этого вообще есть. Сначала обзорно пройдемся по этим возможностям, и после этого рассмотрим уже детально каждую из них.

В настройках курсора есть вкладочка "Rules", "Skills", "Subagent". Это достаточно важная вкладка, которая содержит в себе правила, скилы и субагентов. Здесь есть три таба, то есть, ну, три вкладки. Это "All User", "Cursor Guide". "Cursor Guide" — это, если что, название нашего проекта. По большому счёту, это все пользовательские и в проекте. Ну, вот эти вот сущности: правила, скилы, субагенты. Что это такое, сейчас разберём, не переживайте. Также у нас есть вкладка — это "Hooks", крючки, которые мы скоро с вами разберём. А есть вкладка "Tools" и "MCP". Её мы коснёмся, наверное, в последнюю очередь сегодня. И есть вкладка "Indexing and Docs". Вот давайте, наверное, с этой вкладки начнём. Это самая простая, наверное, вкладка, которая может быть. Индексинг — это индексация вашего проекта. Когда вы делаете какой-то проект, у вас появляется всё больше и больше файлов. И это называется кодовая база. Ну, то есть ваши файлы с кодом. Ну, и не только с кодом. Курсор их индексирует. И индексинг — это вот как раз об этом. В нашем случае у нас кодовая база проиндексировалась, написано 100%, 13 файлов. Можно запустить синхронизацию ещё раз, если нам это нужно сделать. Вообще говоря, она должна запускаться автоматически. Ну, в принципе, ради прикола можно нажать, но сейчас ничего не происходит. Короче, это обычно автоматически всё происходит. Кодовая база курсором индексируется. Всё классно.

Из параметров можно выделить "index new folders". Если стоит галочка, то автоматически будут индексироваться новые папки и, соответственно, файлы. И также здесь есть раздел с игнорированием файлов. То есть мы можем добавить файл курсор и игнорировать. Сейчас я нажал на кнопочку, и он создал этот файл в корне проекта. Здесь мы можем написать, какие файлы будет игнорировать курсор. Например, мы можем добавить файл `.env`, который содержит какие-то ключи доступа и другие чувствительные данные. Но поскольку у нас сейчас таких файлов в проекте нету, мы можем написать, например, следующим образом: `*.md`. Звёздочка значит то, что любое название файла с расширением точка md. В частности, это README. И если мы здесь добавим какой-то файл, например, `private.md`, то он не должен индексироваться курсором. И здесь напротив файла у нас отображается перечёркнутый кружок. Если на него навести, то видно, что мы запретили индексировать этот файл курсору. Если вернёмся в настройки и нажмём заново синхронизацию, то этот файл здесь не появится. Это полезная функция, если вы хотите скрыть от индексации какие-то свои чувствительные данные, приватные, может быть, ваши ключи доступа или пароли. Всё-таки часто бывает так, что люди, ну, не хотят, чтобы нейронка знала, какие у них пароли. Независимо от того, включен там privacy mode или не включен, ну, ну, его нафиг. Короче, можно редактировать файлы, которые будут игнорироваться курсором. Есть такая опция.

Кроме того, здесь у нас есть раздел "Docs". Это классный раздел. Здесь можно добавить документацию, чтобы курсор ей руководствовался. И добавить её можно достаточно просто. Например, мы хотим добавить в документацию доки от Lucid React. Это библиотека иконок. Мы копируем ссылку на эту документацию, нажимаем "Add docs", а, я уже нажал, и вставляем сюда эту ссылку. Нажимаем Enter. Всё. После этого мы можем задать какое-то имя этой документации. Кажется, сейчас я это сбросил. Давайте сделаем заново. Нажимаю Enter. Имя у нас задано. Остаётся нажать просто "confirm". После чего у нас в списке появятся доки от Lucid React и зелёненьким кружочком будет указано, что эта документация проиндексирована. Это достаточно полезно, если вы работаете с каким-то определённым фреймворком, с каким-то определённым языком программирования и так далее. Вы можете добавить сюда документацию, после чего курсор будет о ней знать. Вы также можете явно указывать ему эту документацию, когда хотите обратить на неё внимание. Для этого используется символ собачки. Здесь выбираем раздел "docs". И здесь у нас достаточно много документации. Давайте найдём нашу библиотеку. Вот она. Нажимаем Enter. Всё, мы добавили в контекст чата библиотеку, то есть, ну, документацию этой библиотеки. Круто. Если вы видите, что у вас курсор начинает тупить и делать какие-то странные ошибки, вы можете дать ему документацию на соответствующую библиотеку или язык программирования. Скорее всего, он начнёт работать лучше, если явно посмотрит на доки. Также здесь можно обновлять документацию, нажав на кнопочку "refresh". Библиотека начала заново индексироваться. Сейчас жёлтый кружочек, когда проиндексируется, загорится зелёным. Можно удалять по иконке корзине. Ну, короче, это, в принципе, всё должно быть и так понятно. Это достаточно простой раздел, с ним сильно задерживаться мы не будем. Давайте перейдём дальше.

Нас сейчас очень сильно, на самом деле, интересуют вот эти две вкладки: "Rules", "Skills", "Subagent" и "Hooks". Тема сложная, но интересная и очень полезная. Давайте готовьтесь, сейчас будем раскидывать, что это такое. Чтобы объяснить, как всё это работает, я подготовил небольшую схемку. Сейчас разберёмся, что здесь что значит. А мы с вами пока что работали на уровне промтов. То есть мы писали промты. Промт — это, по сути, сообщение в нейронку с каким-то запросом там что-то сделать или получить какой-то ответ. А это всё промты. Мы писали промты, отправляли их в "Cursor Agent". "Cursor Agent" — это вот это окно, это наш как бы основной агент курсора, который что-то делает или нам отвечает. И на этом, в принципе, всё заканчивалось. "Cursor Agent" выдавал нам результат. Результата здесь нет, но я думаю, вы это без схемки понимаете. Но работает это примерно так. То есть, да, мы пишем промты, курсор агент что-то делает и выдаёт нам результат. Сейчас он только мешать здесь будет. Поэтому оставим пока что вот так эту схему. А, смотрите, самое простое, с чего мы начнём — это команды. Даже в курсоре в окне сообщения написано, что мы можем добавлять слэш для команд. А сейчас мы к этому вернёмся. Как это конкретно делать? Сначала немножко теории.

Через собаку мы можем прокидывать сюда контекст. Да, это мы поняли. Можем добавлять либо какие-то файлы, либо документацию, что-то из терминала. Кстати, мы можем добавлять в контекст предыдущие чаты. Например, если мы сюда нажмём, мы можем выбрать там какой-то из предыдущих чатов. Прикольная функция. Если у нас забился контекст вот этого чата какого-то одного, мы можем прокинуть его сюда. Хотя он, на самом деле, наверное, тоже дофига жрать будет. Но давайте так. Если нам нужен контекст какого-то чата, мы можем его сюда добавить. Всё классно. Не обязательно просить предыдущий чат что-то суммаризировать. Хотя иногда это даже лучше, потому что в итоговом файле всё равно меньше информации будет, чем во всём чате, и она будет концентрированная. Но такая возможность есть. Кроме этого, мы можем сюда ссылаться на браузер и на какие-то элементы. И, в принципе, можем какие-то ветки Git сюда кидать, но их сейчас рассматривать не будем. Это что касается контекста.

Что касается команд, вот на чём мы остановились. Команды, по сути, это те же самые промты, только они описаны в какой-то команде, и нам не нужно их каждый раз писать заново. Например, нам нужно залить наш обновлённый код в Git, да. Про Git я уже упоминал, ничего толком не рассказал. Коротко. Git — это как хранилище для кода, что-то типа Google Drive, Яндекс.Диск, только с кучей дополнительных возможностей, с возможностью контролировать версии, откатываться, делать какие-то параллельные ветви развития и много чего ещё. Так вот, вернёмся к командам. Например, да, мы можем сделать команду для отправки в Git наших файлов, можем сделать какую-то универсальную команду для создания файлов, для инициализации там проекта, для написания документации, для ревью, то есть для проверки нашего кода. Ну, допустим, написать в команде, что "проверь, что у нас всё работает, проверь, что тесты собираются, проверь, что всё хорошо, дай ответ". Чтобы 100, 500 раз после каждого сообщения в нейронку нам не писать одно и то же, мы можем сделать команду. Ну и вообще команды можно использовать для любых каких-то повторяющихся действий, ну, промтов, да. То есть, если мы просим нейронку сделать одно и то же, вместо того, чтобы каждый раз писать заново, можно написать команду. О'кей, примерно понятно. На практике станет ещё яснее. Идём дальше.

Как вы можете заметить, команды и промты помечены здесь зелёным цветом. Это неспроста. Это я сделал, потому что сущности очень похожи. Просто промты мы пишем руками. А в команды мы можем один раз записать какой-то промт и не писать его 100 раз. Но принцип одинаковый. Что у нас здесь есть ещё? Давайте сначала посмотрим на вот эту карточку: "Subagents". Это очень классная сущность в курсоре. И она есть не только в курсоре, она есть в ClaudeCode и, скорее всего, во многих других инструментах для разработки с помощью нейронок. Так что же такое субагенты? Субагент — это как отдельный чат с курсором, вот этот, который открывается отдельно. В чём разница? У него свой изолированный контекст. Допустим, мы делаем какую-то большую задачу, ну, там целую страницу, например, сверстать или что-то ещё, добавить какую-то большую логику. Мы начинаем это делать в нашем основном агенте. И после там первых нескольких промтов у нас забивается контекст. Я вам уже показывал. Вот здесь есть иконка, насколько забит контекст. Здесь, например, 17%, тут 20. Да, это немного, но у нас проект суперпростой, в котором 13 файлов. Если проект у вас большой, то этот контекст забивается очень быстро. Когда я вайпкодил свой сайт, который я показывал в начале, вот этот, даже здесь, казалось бы, небольшой сайт, но очень много кода, компонентов, файлов, плюс документации, про которую я, вообще говоря, отдельные видосы снимал. Можете их тоже посмотреть. В этом видео я прямо настолько подробно про это рассказывать не буду, но штука важная. Поэтому, если вы ещё не работали с документацией для агентов, то это стоит изучить тоже хороший буст вашего процесса разработки. Но не суть. Это я всё к тому, что контекст может забиваться крайне быстро. И когда я вайпкодил сайт, у меня он забивался там за один промт. Там было уже процентов 80. Да, там были большие задачи, но тем не менее, то есть продолжать работать в этом контексте уже было проблематично и нужно было создавать новый чат, например, да. Но если использовать субагентов, то эта проблема решается. Решается она как? Допустим, мы задаём какую-то большую задачу в нашего основного агента, вместо того, чтобы самостоятельно всю её выполнять. А в процессе что он делает? Смотрит, какие есть файлы, какие связанные с этими файлами есть файлы, что вообще надо сделать, где что надо поменять. То есть он кучу файлов просматривает, ищет, где что нужно изменить, меняет. Всё это сохраняется в контекст и забивает контекст. Так вот, есть альтернатива. Вместо того, чтобы делать самостоятельно, этот основной агент вызывает субагента, который начинает выполнять задачу в своём контекстном окне. То есть он не сохраняет всю информацию по файлам, по редактированию, свои размышления в контекст основного чата. Он делает это отдельно в

своём контексте. И когда он заканчивает, в основной чат, вот в этот, он выдаёт только результат. И это очень удобно, потому что основной чат у нас не забивается, мы можем продолжить с ним работать, но при этом основная информация наших изменений и вообще процесса внедрения, реализации какого-то нового функционала, она остаётся.

Собственно, это фишка субагентов. А кроме того, для субагента мы можем прописать также какие-то инструкции конкретно для каждого субагента. А, допустим, будет субагент имплементер, который внедряет задачи. Ему мы напишем какие-то инструкции по внедрению, как это правильно делать, на что обращать внимание и так далее. Допустим, у нас будет субагент ревьювер, который проверяет работу предыдущего субагента и тоже делает это в отдельном контекстном окне. Ну и, допустим, у нас будет субагент, который пишет документацию после всего этого, то есть фиксирую то, как сейчас устроен проект. А на эту документацию потом можно также ссылаться при выполнении каких-то других задач. Ну и вообще субагентов разных можно придумать. Например, планировщик, который составляет план реализации, который после этого уже там имплемендер внедряет в проект ревьювер какой-нибудь, тестер и так далее.

И да, ещё раз скажу, основной прикол субагента в том, что они всё это делают в своём изолированном контексте, не засоряя основной чат с нейронкой.

А дальше давайте разберём правила. Правило, это похожая штука на пром. Это файлы, в которых пишется, ну, правило, логично, да? Э, например, никогда не используй там заглавные буквы в названии файлов или наоборот используй. То есть в правилах можно прописать все принципиально важные для вас моменты, которые нужно учитывать. Например, это может быть код style или нейминг файлов или можно прописать туда, чтобы нейронки не выдавали слишком много текстов, ответов. Такое тоже бывает. Либо, чтобы нейронки не придумывали информацию. Они тоже любят это делать, если не могут найти правильный ответ у себя в голове. Короче, правила, в общем, какие-то нормы, которым нужно придерживаться агентам при выполнении ваших задач.

Дальше давайте разберём скилы. Они очень похожи на правило, но всё-таки есть различия. Скилы используются для описания каких-то процессов. То есть, в правило, мы записываем какие-то простые инструкции, например, стандарты кода, какие-то архитектурные соглашения. Пишем, что можно делать, что нельзя делать. В общем, какие-то простые указания. В случае же со скилами мы описываем какой-то процесс, точнее, как его делать. В отличие от правил, скилы также могут запускать какие-то скрипты. Скрипты имеются в виду для терминала. То есть можно создавать файлы с последовательностью действий, как если бы мы писали их в терминале. Это называется shшеell скрипты или баш скрипты. Ну, короче, файлы, в которых написана последовательность выполнения команд. Мы можем их создавать, класть в папочку скилов и описывать, как этим пользоваться. Например, в таких скриптах можно указать, как работать с гитом или как делать проверку кода. И с помощью скилов агенты будут запускать соответствующие команды или целые файлы и выполнять их. Не обязательно писать эти скрипты. В принципе, в скилах можно описывать просто какой-то процесс, например, проверки качества кода, в общем, какие-то пошаговые инструкции. Вот. То есть в скилах мы фиксируем описание, как делать какие-то процессы. В правилах мы пишем какие-то простые прямолинейные инструкции, что делать, что не делать. Чуть позже, когда мы будем их создавать, я думаю, будет понятнее. Но пока что, да, может быть, немножко путанится. Правила и скилы реально очень похожи. Но я надеюсь как-то на аналогия хоть немножко дал понять, в чём разница. Возможности тоже у них есть разные. Если правила - это, по сути, обычные файлы с текстом, то скилы - это целые папки с теми же текстовыми файлами. И кроме текстовых файлов ещё могут быть дополнительные скрипты, которые выполняются, запускаются, там все эти команды прогоняются. Их можно также писать с нейронкой. Не обязательно досконально разбираться, как эти скрипты под капотом работают. И на самом деле все эти сущности прекрасно описываются с помощью нейронки. Просто надо правильно попросить, и мы к этому дойдём. Пока что я хочу хотя бы примерно обозначить, какие сущности за что отвечают. И мы разобрались с вами, в принципе, со всеми.

Остались только хуки. Хуки тоже классная тема. Они здесь вынесены наверх, типа контролируют агентов и субагентов. В чём прикол? Куки - это процессы, которые запускаются в определённый момент работы агента. Например, перед началом работы агента или когда агент внёс какие-то изменения в файлы или перед вызовом субагента или после вызова субагента. То есть мы можем чётко задать момент, когда будет вызван хук. и выполнить какое-то действие. Хуки бывают ну двух видов. Первые - это терминальные скрипты, которые я пытался до этого описать. Короче, скрипты, которые выполняют какие-то команды в терминале. И второе - это промты. То есть в какой-то момент времени работы агента, например, когда агент закончил свою работу, вызывается хук. Ну то есть там прописано, когда агент закончил работу, вызвать вот этот хук. Мы будем это прописывать. Собственно, вызывается Hookк и выполняет команду линтера, например. Линтер - это такая утилита, которая проверяет форматирование кода, там всякие отступы, пробелы и так далее. Выполняет команду проверки кода и выдаёт результат, например, в чат. И дальше агент может, если есть какие-то ошибки, это исправить. А, либо таких процессов можно добавить несколько. Например, проверить, что нету ошибок в коде, после чего отправить изменения в гит, например. Можно так. Либо ещё один интересный момент, с помощью хуков можно вызывать субагентов. И вот тут уже начинается ещё одна прикольная тема, создание вот этих, ну, условно бесконечных циклов разработки. Когда вы задаёте агенту какую-то большую задачу, и он с помощью субагентов разделяет её на отдельные подзадачи и крутится, пока все задачи не выполнены. И благодаря тому, что всё это выполнение задач происходит у субагентов в их изолированном контексте, а основной контекст основного агента у нас не засоряется, мы можем таким образом делать какие-то очень большие задачи, не боясь того, что у нас просто переполнится контекст и нейронка начнёт галлюцинировать и выдавать какие-то неадекватные решения. При этом мы можем внедрить туда проверку, что код работает корректно. Ну хотя бы ошибок в коде нету. Например, субагент сделал одну задачу. После этого мы выполняем хук для проверки того, что код не содержит ошибок. И если это так, только тогда переходим к следующей задаче. А если нет, то вызываем другого субагента, который фиксит нам наши проблемы. Тема прикольная, да? Не знаю, насколько мы её сегодня реализуем. Ну, частично что-то из этого мы, конечно, сделаем, но видео просто очень долгим получается. Будет ли это полноценно вот вся эта история с цикличным выполнением работать, не знаю. Но с каждым из этих сущностей точно разберёмся.

Давайте вот так ещё, чтобы немножко зафиксировать. Команды - это быстрые повторяющиеся действия. По сути, те же самые промды, чтобы нам не писать их в 100500 раз одинаковыми. Правило - это контекст и инструкции. То есть в правило мы можем добавить пути к каким-то ключевым папкам или файлам. Также дать инструкции агенту, что ему делать можно, что ему делать нельзя и как ему всё это делать. Скилы похожи на правила, но они используются для описания каких-то процессов, не просто каких-то правил, а описание каких-то процессов, которые состоят из определённых шагов. Плюс они могут выполнять скрипты. Субагенты используются для изоляции контекста, чтобы не засорять основной контекст, используются субагенты. Хуки - это автоматизация и контроль событий. То есть перед каким-то событием или после какого-то события мы можем вызвать определённый хук. он сделает какую-то проверку или запустит какой-то промт или какой-то скрипт. В общем, хуки используется для контроля событий в определённые моменты времени.

Давайте теперь посмотрим, как всё это работает в курсоре. Начнём с субагентов и потом разберём все остальные сущности тоже. Чтобы создать субагентов, ну и всё остальное вышеперечисленное, нам нужна папка точкарсор в корне проекта. Её можно создать руками. Нажимаем New Folder токурсор. Всё готово. И в ней будут храниться файлы и папки для курсора, которые будут, собственно, и содержать все эти скилы, правила субагентов, хуки и так далее. В принципе, эта папка уже может быть у вас создана. Курсор иногда её создаёт автоматически. Также, если мы перейдём здесь в раздел, допустим, правила и создадим здесь какое-то правило для проекта, то папка тоже создастся автоматически, и там появится это правило. К правилам, мы вернёмся чуть позже. Сейчас я эту папку создал руками.

Чтобы создать субагента, нужно в папке точка курсор создать ещё одну папку, которая будет называться agents. Вот она, создалась папка. И внутри этой папки мы можем создавать наших субагентов. Для этого нужно создать новый файл. Я назову его implementer.m. И по сути субагент у нас уже готов. Курсор также подсвечивает здесь параметры этого субагента. Сейчас у нас здесь ничего не написано. Давайте это исправим. Итак, я добавил сюда информацию о субагенте. Частично она забегает вперёд. Ну, то, что мы чуть позже будем делать, здесь уже прописано. Это моя заготовка этого файла, чтобы на видео всё не писать. Но вкратце давайте поясню. Вот в этом блоке, который между тремя чёрточками находится, это метаданные. Как можете заметить, они подтянулись сюда автоматически подтянулся desption, по крайней мере Ronли, кстати, тоже, если мы здесь сделаем true, то можете заметить, что Ronли включит. Сейчас я коротко поясню, что это такое, за что отвечают эти параметры. Имя, очевидно, это имя. Если мы добавим сюда что-то, то и в этом имени оно появится. О'кей. Ну, пока что делать этого не будем. Description - это описание того, когда должен этот субагент автоматически активироваться. Скажу сразу, это не всегда работает идеально, и часто приходится руками прописывать субагента, чтобы он был использован. Делается это следующим образом. Через слэш. Далее мы пишем имя субагента имплементер. Вот он у нас подсвечивается. И нам нужно его обязательно выбрать. Нажать Tab, тогда он будет у нас подсвечиваться. Либо просто тыкнуть на него курсором мыши. Он должен подсветиться, потому что если мы просто пропишем имплементер и всё, то так он не подсвечивается. Лучше, чтобы он подсвечивался. Тогда курсор явно понимает, что мы взаимодействуем с этим субагентом. И на самом деле, если мы здесь ему зададим какую-то задачу вот после этого упоминания, то курсор поймёт, что нужно вызвать этого субагента и для выполнения этой задачи вызовет его. Это классно. Всё. Это, на самом деле, базовая история использования субагентов. которой для начала уже достаточно, чтобы пользоваться. Здесь мы задаём какую-то инструкцию, что агент делает. Здесь мы его вызываем и всё. И он работает в своём изолированном контекстном окне, а на выход даёт только вот результат своей работы. Но перед тем, как его использовать, давайте посмотрим, что тут ещё написано. В дескрипшене, как я уже сказал, описано, когда его нужно использовать. Иногда это работает автоматически, иногда не работает автоматически, и нужно указывать руками. Дальше идёт модель. В данном случае написано inherit. Также модель можно выбрать здесь в выпадающем меню. Inherit - это значит наследуется. То есть модель будет такая же, как выбрана в основном агенте. Ну, в данном случае SNT 4.5. Если бы я выбрал модель какую-то другую, то она бы наследовалась и вот этот субаген бы тоже её использовал. На самом деле важный параметр. То есть если вы понимаете, что задача, которую будет делать ваш субагент, ну, какие-то простые, в принципе, вы делаете для простых задач. Допустим, запуск тестов, проверки кода, запуск линтера, ну не знаю, в общем, какая-то простая задача, то можно здесь вместо наследования поставить какую-то простую модель, например, Хайку 4,5 или вообще поставить авто. Но авто мне, честно говоря, нравится не очень. Я бы лучше руками поставил какую-то конкретную. В общем, вы поняли. Модель можно выбрать. Классно. Параметр Ronли отвечает за то, что может ли этот агент редактировать файлы или он может только читать. Например, вы можете сделать агента, который должен вам, ну, типа отревьювить код, но ничего не изменять и ничего вам не писать, просто дать какую-то свою оценку. Можете включить Redon из бэкграунда. Что это за параметр? Это параметр, отвечающий за то, будет ли агент блокировать дальнейшее выполнение задачи, либо будет запускаться в фоне. То есть, если из бэкграунд стоит true, то, значит, агент запустится в фоне, а в этом чате агент продолжит что-то делать. Иногда это нужно, иногда нет. Если вы хотите, чтобы основной агент подождал результата выполнения этого агента, тогда ставьте флse. Если хотите, чтобы он параллельно что-то там запускал, можете ставить true, и тогда он не будет блокировать основной процесс чата. Фу. О'кей. Едем дальше. Дальше у нас идут инструкции этого агента. Вы можете заметить уже давно, на самом деле, что здесь, во-первых, какие-то символы используются, типа трёх чёрточек, какие-то решётки. В общем, немножко странный формат, если вы первый раз это видите. Объясняю. Это формат MarkDу. Я уже про него несколько раз видео говорил, ну, упоминал, но сейчас, наверное, стоит пояснить. Формат Mark.m. - это, по сути, обычный текстовый файл, но он поддерживает разметку. Ну, то есть мы можем явно указать, что есть заголовок, что есть список, и нейронки это хорошо считывают. Кстати, в курсоре можно также нажать на вот эту иконочку и посмотреть в превью, как выглядит этот файл. То есть это уже отформатированный файл. Можете заметить, здесь есть заголовки, здесь есть списки, причём заголовки разных уровней. Есть вот какой-то цитата или код - это это код Маркдауна, причём, да, вот тремя апострофами вот этими выделяется блок кода. Причём после апострофов пишется, что это за код. То есть в данном случае это mardдау формат. Здесь мог быть там, не знаю, CSS или Typeescript там или баш. И в зависимости от этого у нас по-разному подсвечивается, собственно, то, что находится внутри этого блока. Но, естественно, нужно соответствующий формат писать. к тому, что внутри находится. В данном случае внутри находится маркдаун, поэтому, ну, его нужно написать как Marкдаун. Ладно, а сейчас сильно углубляться в это не будем, потому что я боюсь видео очень надолго затянется. Но, короче, это инструкции, инструкции агенту, что он должен делать. Коротко здесь написано, что он должен там понять, что это за задача, планировать имплементацию, внедрить это всё, проверить, что всё хорошо, следовать best practтисом. Также написано output format - это то, что он, по идее, должен выдать на выходе и как бы в основной чат. О'кей. Также написано, что ему делать не надо. И chain Triggers, ну, это чуть позже мы с вами посмотрим, когда будем создавать остальных субагентов. О'кей.

Теперь, ээ, ну, давайте просто ради примера, что ли, что-нибудь с ним сделаем. Давайте вот опять же вызовем элементера и попросим его сделать форму обратной связи. Например, сделай форму обратной связи на главной странице, в которой добавь поля имя, email и сообщение, а также кнопку отправить. Не нужно делать логику, только визуальное отображение. О'кей, я надиктовал промт. Сейчас вначале я добавлю нашего имплементера, чтобы его тегнуть, и нажимаю отправить. Сейчас мы посмотрим, как запускаются сабагенты внутри контекста. Смотрите, сейчас работает основной агент. Он начинает что-то смотреть, проверять и так далее. Давайте посмотрим, что произойдёт дальше. Вот. А вот это то, что нам нужно. Так выглядят субагенты. То есть сейчас имплементер работает в своём контекстном окне. Он не засоряет наш основной чат. он получил какую-то задачу и начал её выполнять. Мы можем нажать на него, это я уже сделал. И вот здесь мы видим окно этого субагента. То есть также он размышляет, меняет какие-то файлы и сейчас будет внедрять нам форму обратной связи в наш проект. При этом основной контекст у нас не засоряется вот этой информацией. То есть после того, как субагент выполнит свою задачу, он отправит в ответ какую-то информацию, что он сделал. Эта информация уже будет в основном контексте нашего основного агента. Субагент выполнил задачу. Здесь вот даже галочка появилась, что он закончил выполнение. Сейчас мы пока что скроем его размышление. В нашем основном чате есть только то, что мы делегировали имплементеру выполнения задачи. Он это сделал. И на выходе мы имеем, что наша задача внедрена, то есть добавлена форма обратной связи. Если мы посмотрим на нашу страницу, то действительно она здесь появилась. Get in touch, name, email. Правда, сообщения я тут не вижу. Это, конечно, упущение. А может быть я ему Да, действительно, в промте нету сообщения о том, что нужно добавить поле для сообщения. Может быть, я это не сказал, либо в переводе это как-то не учлось, но то, что мы попросили по факту, он сделал. То есть сделал только визуальное отображение. И визуальное отображение есть. Всё прекрасно, оно типа работает, отображается, всё хорошо. О'кей, с субагентами понятно. Ну, то есть как их, в принципе, создавать, мы разобрались. как их использовать, тоже разобрались. Ну, то есть это достаточно простое и эффективное применение для экономии контекста в каком-то одном чате. Таких агентов можно создать несколько. Мы к этому чуть позже вернёмся.

Сейчас давайте разберёмся ещё с другими сущностями. Тоже начнём, наверное, с правил. Создать какое-то правило мы можем либо вручную, добавив в папку курсор ещё одну папку Rules, либо мы можем перейти в настройки. Переходим в курсор Settings, в раздел Rules, Skills и Subagents. И давайте немножко, да, перед тем, как мы создадим какое-то правило, разберёмся, какие они вообще бывают. А как минимум есть вот тут вот три вкладки. По большому счёту нас интересуют две из них: пользовательские и проектные правила. Правила пользователя - это те правила, которые будут применяться ко всем проектам. То есть, если вы откроете другую папку, то правила пользователя сохранятся. Курсор guide - это название текущей папки. Здесь находятся правила данного проекта. То есть они будут храниться вот как раз у нас в папке курсора внутри проекта и, соответственно, будут применяться только к этому проекту. По приоритету сначала в первую очередь идут правила проекта и только потом идут правила пользователя. То есть правила проекта переопределяют правила пользователя. Ну, если там это переопределение присутствует. О'кей, давайте, э, посмотрим, что мы можем здесь сделать. Здесь есть раздел правила. Мы можем нажать на кнопку New и выбрать тип правила, которые мы хотим добавить. Мы можем добавить user rule - это пользовательские правила, которые применяются ко всем проектам, как я уже сказал, либо project rule. Давайте выберем его. Rule name. Для примера сделаем general. Просто пока что правила. Назовём это general. О'кей. Для примера я напишу здесь скорее юмористическое, чем полезное правило. Я говорю всегда говори: "Привет, мой повелитель, когда начинаешь диалог". Далее я нажимаю кнопку Сохранить. И заметьте, у нас появилась папочка Rules в папочке курсор. Точно так же мы могли бы создать её своими руками, всё было бы о'кей и оно бы тоже так работало. Давайте посмотрим, как оно работает. Напишем в чате, ну, что-нибудь типа "Объясни, что это за проект". Ээ, и включим режим, например, AS, чтобы спросить. Допустим, это проект, который мы ещё не знаем. Пускай ээ нам Неронка это объяснит. Нажимаю Enter. И сейчас мы увидим, что первыми словами она нас поприветствует. Пожалуйста, Greeting, my lord. Вот так это работает. Но, естественно, давайте возвращаться к каким-то более прикладным правилам. Конечно, не обязательно писать здесь такое. Можно написать про наименование файлов, про то, как отвечать и так далее. Давайте пока что напишем следующее правило. Оно как бы универсальное. Я прошу его всегда отвечать коротко и по делу. Пока я не попрошу что-то объяснить. Это уже может быть полезным правилам, потому что нейронки любят достаточно много расписывать. Ради интереса можем сейчас опять задать этот вопрос нейронке. Ну, кстати, я всё-таки хочу, чтобы она меня приветствовала. Так что оставим и то, и другое. И теперь я задам тот же самый вопрос неронки в новом чате и посмотрим на то, как она ответит на этот раз. Сравним просто вот два этих ответа. Точно такой же запрос. И давайте посмотрим, какой будет ответ. И вот она ответила, не сказать, что прямо сильно короче, но на самом деле всё по делу ответила. Но покороче, тут она даже про какой-то дизайн начала нам что-то заяснять, про цвета, про пути. А в нашем новом ответе она, ну, чуть-чуть покороче это сделала. То есть, в принципе, это работает. На самом деле здесь ответ по делу. Никаких лишних особо ответов здесь нет. Ну, если нам нужно как-то конкретизировать эти правила, мы можем это сделать. О'кей. Также мы могли бы здесь описать, например, структуру папок. Допустим, создадим правило projecture. MDC. MDC, если что, это точно такой же Markдаун. Вы можете заметить, что первые две буквы совпадают только с припиской C. Это значит, что здесь также поддерживаются метод данные. В общем, они и здесь, как выяснилось, поддерживаются, но правило, в общем, лучше писать в таком разрешении. И в данном случае мы сделаем следующим образом. Мы попросим нейронку заполнить это правило, исходя из структуры нашего проекта. Сделаем это так. Напиши правило, которое будет содержать основные основную информацию о структуре нашего проекта. Всё, я говорю, создай правило, которое будет содержать основную структуру нашего проекта. Кидаю ему в контекст этот файл. И дальше нейронка будет записывать нам прямо в этот файл наши правила. Поздоровалась, всё супер. И теперь она пройдётся по нашей архитектуре. и запишет это в этот файл. Это полезно, особенно когда проект достаточно большой. Можно один раз вот так пробежаться по всему проекту и зафиксировать это в каком-то правиле, чтобы неронка знала, э, куда смотреть.

Теперь давайте немного поговорим, как эти правила, ну, применяются. Можете заметить, что здесь есть параметр Alway Supply, причём он есть вот здесь. И есть ещё вот эта выпадашка. Да, этот интерфейс отличается от того, что мы видим в субагентах, потому что, да, это правило, здесь другие параметры. Always supply true - это значит, что это правило всегда будет прикрепляться к чату. Вообще правила работают следующим образом. Когда мы пишем какой-то промт, вот в новом чате, помимо того, что мы сюда пишем какое-то сообщение, к этому сообщению прикладываются эти правила. Ну, точнее, как прикладываются все правила, у которых параметр always apply true. Каким ещё может быть этот параметр? Вот здесь, если нажать на эту выпадашку, можно посмотреть, да, Always apply. Это всегда отправляются ко всем сообщениям. Apply intelligent - это значит, что курсор должен сам понять, когда применить это правило. А чтобы он это понял, нам нужно описать вот в этом поле, когда это правило нужно применять. Когда мы заполнили это поле, у нас появляется дополнительный параметр здесь description. Он и есть это поле. Это одно и то же. Допустим, сейчас я написал всегда, когда нужно найти какой-то файл в проекте, нужно использовать это правило. Ну, тоже как бы не 100% всегда работает. Когда нейронка должна что-то сама понять, всегда есть шанс, что она не поймёт. Да, это нужно иметь в виду. Но, в принципе, это рабочая штука. Здесь пишем подробно, когда нужно применять это правило, и нейронка оценивает это и выполняет. Почему это может быть полезно? Если у нас здесь выбрано Alway Supply, это значит, что это правило будет всегда прикрепляться к нашим запросам к иагенту. А это, в свою очередь, значит, что у нас каждый раз будет забиваться контекст. Ну, то есть в каждый раз в контекст будет добавляться полностью вот это правило. Иногда это нужно, но если это правило не рассчитано на то, что оно каждый раз при любом запросе нужно, тогда, соответственно, лучше как-то настроить вот эту область применения, чтобы лишний раз контекст не забивать. В случае, если мы выбираем apply intelligently, то тогда у нас в контекст агента попадает не весь файл, а только вот это описание. И нейронка смотрит на это описание и решает, нужно ей использовать это правило или нет. О'кей. Дальше у нас что тут есть? Apply to specific files, например. Тогда мы можем применить это правило к файлам определённого разрешения. Например, только Typeesрипt файлы, только Markда файлы, только Python файлы и так далее. Допустим, если у вас правила относятся к конкретному языку программирования, ну, например, правило наименования файлов или правила оформления кода или максимальное количество строк в файле, короче, тогда это можно применять к определённым форматам файла. Причём не только это относится к расширениям файлов. Ну, то есть вот эта вот точка tsx, там тоm md и так далее. Можно также ещё и папки конкретные указывать, как вот здесь вот можно заметить, да, src/cfig/ две звёздочки - это значит там любая вложенность папок то jon. Это значит, что все файлы то js в папке config и во всех вложенных папках будут учитываться и, соответственно, к ним будет применяться это правило. Если их агент будет трогать, будет применяться это правило. И apply manually - это когда мы вручную должны всегда указывать это правило, когда хотим его использовать. Без этого автоматически курсор его использовать не будет. Делается это следующим образом. Вот я сейчас сохранил, собственно, этот файл. И теперь я могу через собачку здесь найти, а, ну, он у нас сразу подсвечивается project, то есть я могу его так выбрать и добавить в контекст. Тогда это правило будет использоваться в контексте этого диалога с агентом. Фух. Ну, примерно так. Э, давайте, наверное, с правилами пока закончим. В общем, надеюсь, вы поняли, как работают правила. И вот вам

ещё небольшая подсказочка, да, как их использовать. Допустим, если вы замечаете, что вы объясняете курсору одно и то же уже десятый раз, например, что делать, а что не делать, то, возможно, имеет смысл записать это в правило, и тогда не придётся так много ему это объяснять.

О'кей, едем дальше. А в этом файле я пока что включу режим apply intelligently. То есть пускай он используется всегда, когда нужно найти какой-то файл в проекте. Пока что меня это устраивает. О'кей, закрываем.

Давайте теперь посмотрим, что такое команды. Команды можно создать вручную, создав папку commands внутри папки курсор, либо нажать слэш, пролистать до конца. И здесь есть кнопочка create command. А давайте её нажмём. И, допустим, мы сделаем команду explain. У нас автоматически создалась папка commands внутри папки курсор и файл explain explain, то есть объяснять. И давайте вместо того, чтобы вручную сейчас писать эту команду, попросим сделать её нашего агента.

Создай команду Explain, по которой будет агент объяснять какой-то участок кода или запрос из промта. Я хочу, чтобы по этой команде наш ИИ-агент объяснял нам то, что мы дальше в неё отправим. Команды могут принимать какие-то параметры. Собственно, параметрами может быть какой-то текст, который мы пишем после команды, либо какие-то файлы, которые мы также добавляем в контекст.

Итак, он создал нам команду. Мы примем этот файл, название explain, описание explain code or concept in depth. Короче, он должен объяснить нам то, что мы от него просим. Добавил теги для этой команды, и нас больше всего интересует это вот это содержимое. Здесь описана инструкция, то, что мы хотим получить от этой команды. На самом деле пишется это обычным языком. На всякий случай поясню. Я всё пишу на английском, потому что английский занимает меньше токенов в контексте. Например, русские символы занимают больше токенов в контексте. Поэтому чисто из цели экономии писать на английском получается дешевле. Кроме того, английские нейронки понимают всё-таки чуть получше. Я не говорю, что они плохо понимают другие языки, но английские - это типа их родной язык. В общем, здесь у нас есть инструкции и output. Естественно, это всё можно редактировать так, как надо именно вам. Если вам нужен формат какой-то другой или какие-то дополнительные инструкции, пожалуйста, меняйте. Здесь можно написать всё, что угодно своими словами. Но сейчас, чтобы не затягивать видео, давайте просто, ну, пройдёмся по всем этим сущностям. Я думаю, что дальше вам от своих целей уже будет понятно, какие команды вы хотите сделать.

Команды нужны для того, чтобы 100 раз не писать одно и то же в промты нейронке. Как мы разбирали на схемке, команды - это те же самые промты, просто заранее прописанные. Вот и всё.

Давайте используем нашу команду explain для теста. Вот через слэш вызываем эту команду и, допустим, отправим ему файл package.json. Нажимаем Enter. Это я случайно открыл. Закрою. М. Сейчас он должен нам объяснить, как работает package.json. Но он приветствует нас, как мы его просили. Всё супер. И он начинает объяснять. То есть мне не приходится каждый раз прописывать ему какой-то промт. Я просто вызываю команду, даю ему входные данные, и он начинает с ними работать. Ну, грубо говоря, он просто подставляет вот этот промт в наше сообщение, которое мы пишем нейронке. Вот, собственно, он нам выдал результат в том формате, в котором мы его просили. То есть сначала идёт overview, потом details и key concepts и considerations. Короче, как мы его просили, так он и ответил. При этом мы можем здесь ему написать всегда, отвечая на русском, например. И тогда, если мы сейчас заново отправим этот запрос, он должен нам ответить на русском. При том, что вот здесь у нас инструкция написана на английском. Давайте посмотрим, сделает он это или нет. Да, действительно, он начал с нами разговаривать на английском, но когда он выдал нам результат собственно проделанных действий в этой команде, он ответил нам уже на русском. Говорит, обзор, конфигурация на next.js. Вот детальный разбор и ключевые концепции и важные моменты. Всё. Вот так вот.

Команды можно использовать, да, для каких-то, ну, простых повторяющихся действий. Например, закоммитить что-то в гид, объяснить что-то, возможно, добавить документацию. Хотя для этого я бы использовал скорее агента, потому что в агенте можно прописать точно так же все инструкции. Просто он будет запускаться в отдельном контекстном окне. Пока что про русский язык я удалю. И с командами давайте, наверное, на этом закончим. Ну, то есть, в принципе, я думаю, как ими пользоваться, понятно. Просто берёте какие-то свои повторяющиеся промты, создаёте соответствующую команду, пишите эти промты в команду и вызываете через слэш. Всё готово. Вы работаете с командами, вы молодцы.

Из всего этого многообразия нам осталось разобрать скилы и хуки. Начнём, пожалуй, со скилов. Чтобы создать скилл, есть в целом также два пути. Можно вручную создать здесь папку skills и создавать эти скилы. Там можно делать это иначе. Нажимаем на настройки, переходим в Cursor Settings. И здесь в разделе Rules, Skills and Subagents есть кнопочка создать skill. Вот она, раздел Skills. И дальше нажимаем new.

Что происходит? У нас открывается новый чат с агентом. И здесь есть, во-первых, команда, между прочим, да, э, команда, встроенная в курсор, если что, она там изначально прописана. И пояснение: помоги мне создать скилл для курсора. Допустим, я хочу создать скилл project. То есть проверка, что проект здоров. Ну, дословно, да. Нажимаю Enter. Что это значит? Он будет запускать определённые там тесты, линтеры и проверять, что проект без ошибок может собраться. О'кей, он нас приветствует. Спасибо. И дальше, между прочим, задаёт соответствующие вопросы. Такой же интерфейс может у вас появиться, если вы будете в режиме планирования что-то делать. То есть, если у вас большая задача, вы выбираете здесь режим планирования, и курсору нужно что-то уточнить, он откроет здесь соответствующее окно.

Давайте ответим на его вопросы. Он спрашивает, что нужно проверять. Ну, давайте для начала что-то простое. Например, и форматинг, то есть это формат кода. Выбираю этот пункт. Потом у нас идёт второй вопрос, где должны располагаться скилы. То есть здесь он предлагает нам два варианта. Это скилы юзера, то есть глобальные скилы и скилы проекта. В данном случае я сделаю это скилом проекта. Здесь он, собственно, поясняет, что первый вариант доступен для всех проектов. Он находится в глобальной папке пользователя. И второй вариант - это для конкретного репозитория. Ну, для конкретного проекта. Выбираем его. Какой формат мы предпочитаем? Здесь можно выбрать детальный Markdown report. То есть он вот в формате маркдауна будет каждый раз отчёты генерировать. Можно простой чек-лист, и я выберу простой чек-лист. И последний вопрос: должен ли этот скилл включать в себя конкретные скрипты, которые будут выполняться? И здесь я отвечу: да. Я хочу, чтобы он выполнял запуск линтера и автоматически проверял, что всё отформатировано корректно.

Курсор закончил создавать нам скилл. Давайте посмотрим, что он сделал в папке курсор в Skills. У нас появилась новая папка, которая называется Project Health Check. То есть скилы создаются не одним файлом, а для них создаётся целая папка, внутри которой написан сам скилл. README он написал скорее для нас, чтобы мы понимали, что это за скилл. Основной файл здесь именно skill.md в папке с названием самого скила. Кроме этого файла также он создал папку scripts, в которой прописал скрипт для запуска Healthcheck. Если мы посмотрим в сам файл skill, сейчас пока что я соглашусь со всеми его изменениями. Здесь непосредственно описано, что ему делать. То есть он должен запустить автоматические проверки качества и вывести на экран то, что у него получилось. Дальше у него написано, как это запускать. То есть он здесь прописал скрипт, который ему нужно запустить, и дальше показал, в каком формате ему нужно вывести результат. Кроме того, на что стоит обратить внимание, это, конечно, метаданные, то есть имя. Понятно, что важно - это description. По этому description'у он как раз и будет понимать, когда ему нужно использовать этот скилл. То есть, по идее, тут написано вот что: Analyze code quality through automated checks for linting type safety and code consistency.

О'кей, давайте попробуем это сделать, просто написав ему run health check. А причём мы здесь не указываем конкретный скилл. По идее, он сам должен догадаться, что ему нужно использовать. Давайте посмотрим, сможет ли он это сделать. Указали мы здесь достаточно прямолинейно. Ну, то есть запусти. О'кей. И сейчас, да, он начал изучать Project Health Check, запустил тот скрипт, который мы здесь указали. Ну, он здесь и создан, на самом деле, вот этот скрипт. И дальше вывел нам результат, причём в том формате, который был указан здесь в скиле. Собственно, вот Project Health Check и вот code quality. О'кей. Вот что у нас получилось. У нас валится только, то есть fix npm run. О'кей. Ну, мы можем это запустить, не факт, что он исправит сразу все ошибки. И тут, кстати, интересный момент, что линтер начал проверять вот этот файл и нашёл там, соответственно, ошибки. Мы можем, во-первых, это запустить, во-вторых, с помощью нейронки пофиксить либо просто написать ему fix it и отправить это. Но на самом деле тут проблема в том, что нам, по большому счёту, не нужно проверять качество кода в скриптах, которые находятся в скилах. То есть это не совсем часть нашего проекта, но давайте попробуем ему отправить. То есть решение здесь два: либо как-то исправить этот файл со скриптом, либо просто его игнорировать, потому что нам надо проверять именно качество кода в проекте, а не в наших скриптах. Но он, скорее всего, попытается его исправить. Я бы его, честно говоря, просто игнорировал. Работает и хорошо то, что там какой-то формат не указан, ну это не принципиально важно. Тут можно остановить и попросить его не fixed, а убрать этот файл disable linter for cursor folder. То есть мы ему прямо говорим, что для линтера не нужно учитывать папку курсор. И сейчас он в настройках вот в этом файле допишет, что нам нужно игнорировать. Вот здесь есть глобальное игнорирование. Здесь прописаны папки, которые линтер не должен анализировать, и он дописал сюда папку курсор со всеми вложенными файлами.

О'кей, возможно, вы не знаете, что такое линтер. Ну и ничего страшного. Линтер - это такая утилита, которая проверяет формат кода. И на самом деле при работе с нейронками достаточно полезная, потому что она даёт какие-то адекватные ограничения нейронки по формату кода. И чем строже мы задаём эти ограничения нейронки, тем лучше. Сами линтеры не забивают контекст, то есть они просто выполняются как проверка и указывают на ошибки. Это очень классно, поэтому использовать линтер в проектах, ну, в принципе, это хорошая практика. Но при работе с нейронкой это получается ещё полезнее, потому что благодаря этому мы можем как-то задать рамки формата кода для нейронки.

О'кей, сейчас он добавил нам папку курсор в игнорирование. Если мы заново запустим тот же самый промт с просьбой запустить Healthcheck, то сейчас не должно быть никаких проблем. Как вы помните, у нас показывался красненьким, что он не работает. И сейчас поскольку мы добавили в игнор файлы, которые находятся в папке курсор, на который он ругался, а, ну, кстати, может быть, у нас это не получилось сделать, давайте проверим. Линтер у нас сейчас отрабатывает корректно, но здесь у нас, видимо, ошибка в скрипте. Можно, в принципе, пометить это нейронке, сказать, чтобы она это исправила. Сказать, что линтер у нас работает без ошибок. Исправь скрипт, который проверяет качество. Вот так вот скинем ему данные из консоли. что линтер нормально отрабатывает и файл с проверкой ему скинем. Здесь проблема, скорее всего, вот в этом условии. Он проверяет, что в ответе есть либо errors, либо no errors, но в ответе у нас нету ни того, ни другого, поэтому он считает, что у нас есть ошибки. А на самом деле ошибки есть, когда в ответе есть слово error. Поэтому сейчас вот он это условие как раз поправит. Давайте мы нажмём keep file. И сейчас, скорее всего, он нам выдаст уже корректную, да, картину. 6 из шести проверок выполнены. Хорошо, всё супер. То есть у нас и скил работает, и линтер работает, и скрипт работает. Всё, кайф.

О'кей, едем дальше. Со скилами, ну, плюс-минус понятно, я надеюсь. Просто рассматривать все возможные скилы, которые можно сделать, это достаточно долгое. У нас и так видео супер огромное получается, поэтому пробежимся, ну, хотя бы обзорно, что здесь есть. Я понимаю, что для восприятия это может быть достаточно сложно, но вам не обязательно использовать всё и сразу. Просто в какой-то момент вы вспомните, что существует такая сущность, как скилы, и можно её использовать для ваших задач. Например, если вам нужно будет явно описать какой-то процесс, который вам нужно регулярно проделывать, то вы можете создать для него соответствующий скилл. И это упростит вам работу тем, что вам не придётся каждый раз это руками всё прописывать, делать и так далее. Кстати говоря, agent Skill - это некий стандарт. Вот у него даже есть официальная страница, это agentskills. В котором описан, собственно, формат скилов для агентов. Поэтому не нужно думать, что это какое-то тупое расширение правил. Это уже стандарт, которым пользуются многие ИИ-агенты. И, соответственно, формат вот этих скилов, он должен быть одинаковый у разных ИИ-агентов. То, что мы пишем для курсора, подойдёт и для Claude-code, и должен подойти для других агентов, которые следуют этому стандарту.

Из наших всех вот этих сущностей разобрать нам осталось только хуки. На самом деле, каждая из этих сущностей достойна отдельного видео. И уместить в полной мере рассказ обо всём в одном видео, ну, практически нереально, либо оно будет длиться часов 6:00. Поэтому в этом видео мы всё-таки обзорно всё это рассматриваем и по необходимости, может быть, углублённо рассмотрим каждую из этих сущностей отдельно.

Ну давайте разберёмся, что такое хуки. Как я уже говорил ранее, хуки - это некоторые процессы, которые запускаются в определённый момент работы агента. Эти определённые моменты, скажем так, можно все посмотреть в документации курсора в разделе Hooks. И здесь есть все события, к которым можно эти хуки привязать: начало сессии, конец сессии, перед использованием инструмента, после использования инструмента, если использование инструмента завершилось с ошибкой, начало работы субагента, конец работы субагента, начало работы скрипта, конец работы скрипта. Короче, вот он весь, собственно, список событий. При компакте. Ещё, кстати, есть компакт - это процесс, ну, сжатия, очевидно, да, э, контекста внутри вашего окна. То есть, если вы дошли до предела в этом контекстном окне одного диалога с агентом, вот тут вот у вас показало 100%, то скорее всего курсор сожмёт ваш диалог, сделает какую-то суммаризацию, и вы сможете продолжить дальше работать. Но, естественно, в этой суммаризации зафиксируются, ну, не все подробности, которые были у вас в чате.

Давайте посмотрим, как создавать хуки. Для того, чтобы создать hook, эм создать файл hooks.json в папке курсор. Опять же, его можно создавать в пользовательской папке, тогда он будет работать во всех ваших проектах, либо добавить его в папку проекта, чтобы он работал в конкретном проекте. Давайте это сделаем в папке курсор. Нажимаем правой кнопкой New Hooks. Всё, кайф. Hooks.json выглядит, ну, примерно следующим образом. Давайте его скопируем. Отсюда вставим. Получается следующее. Ну, версия понятна, мы её произвольно можем писать хоть один, хоть два, хоть три. Это полезно, если вы ведёте, в общем, какое-то версионирование в гите. И можно эти версии прописывать. То есть, особенно это полезно, если вы работаете с командой. Можно тогда сравнивать версии хуков друг с другом. Короче, версия - это вот для вас для понимания, какая версия, собственно, хуков используется. В данном случае мы сейчас скопировали. Здесь у нас есть один хук. Это формат JSON. Ну, блин, если вы вообще ни разу формат JSON не видели, то так описывается объект. В фигурных скобках через запятую перечисляется объект в формате ключ-значение. Я понимаю, что если вы первый раз открыли курсор и вообще никогда не программировали, это сложно для восприятия, но типа какой-то параметр и его значения. Давайте так скажем. Вот параметр версии в данном случае один, параметр hooks в данном случае тоже у нас объект, в котором параметр, ну, ключ, ладно, давайте называть это ключом всё-таки, да, это как раз то событие, то есть в данном случае это after file edits. Здесь вот можно посмотреть все эти события, они здесь описаны. After File Edits - это один из них. Допустим, выберем для начала просто Session start. Просто для примера можем прописать её вот так вот. Session start. Это значит, что когда начнётся сессия, будут включаться следующие хуки. Они здесь описаны в квадратных скобочках. В квадратных скобочках это значит, что это массив, то есть набор из нескольких элементов. В данном случае это набор из нескольких хуков. Ну, пока что он здесь. Вот он один - это уже описание конкретного хука. Что делает этот хук? Хуки бывают у нас двух типов. Первый - это команда, то есть какой-то скрипт, который будет выполняться. И второй вид хуков - это промты. Вот. То есть первый вид - это command-based hooks. Мы даём просто ссылку на какой-то скрипт, который будет выполняться. И второй тип хуков - это prompt-based hooks. Давайте пока что вот с него начнём для простоты понимания. Ну вот вставим формат хука с промтом. Выглядит следующим образом. То есть написан промт. Понятно, что это тип промт и, собственно, сам промт. Тайм-аут - это время, которое будет ждать агент перед тем, как, ну, продолжить пока завершится этот хук. Здесь в промте написано следующее: является ли эта команда безопасной для выполнения, разрешить только reads, то есть только те операции, которые для чтения, для записи, ну, соответственно, не разрешены. То есть если команда меняет какой-то файл, значит, она небезопасная. Ну, по логике вот этого промта. Здесь стоит сказать, что он, по идее, должен выполняться, когда у нас курсор хочет выполнить какую-то команду, да, и мы перед тем, как её выполнить, спрашиваем: "А команда безопасная?" Ну, то есть срабатывает вот этот хук, задаёт вот этот вопрос: "А команда безопасная?" И после этого, если команда безопасная, то агент продолжает выполнение. А если она меняет какой-то файл, соответственно, он его ограничивает. Для примера сойдёт, да? Давайте поменяем, в общем, сам само событие, когда будет выполняться эта команда на предложенное, то есть before shell execution. И мы спрашиваем, типа, команда нормальная или не очень. Допустим, мы попросим удалить курсор, я не знаю, какой-нибудь файл. Это прям, ну, хардкор, конечно. Естественно, это для примера, но файл, допустим, package.json. Вис терминал command. Ну, специально я пишу это, чтобы он выполнил какую-то команду. А, кстати, важный момент, вот мы добавили хуки. Здесь в настройках можно посмотреть в разделе hooks добавился он или нет, потому что, возможно, придётся перезапустить курсор, чтобы наши хуки, ну, как бы начали работать. Но давайте попробуем без перезагрузки. Просто отправим запрос типа удали файл с помощью терминальной команды. И сейчас посмотрим, что он сделает. Во-первых, он пытается выполнить команду. И обратите внимание, он её не выполнил. А, блин. [смех] Ой, прикол. Короче, прикол в чём? Да, он попытался выполнить команду на удаление, потом сработал наш хук, который спросил: "А эта команда безопасно? Мы разрешаем только операции для чтения". Собственно, он заблокировал выполнение этой команды. Вот здесь курсор сам пишет, что команда была заблокирована хуком, и он решил тогда удалить это не через терминал, а просто выполнить действие удаления. Вот сейчас мы, конечно, это откатим, вернём наше предыдущее состояние, где этот файл существовал. В обычном случае, скорее всего, он бы не стал этого делать. Ну, то есть, если бы мы явно не попросили удалить файл. Вот если бы какая-то команда просто меняла, собственно, файл или удаляла или перемещала, ну, короче, что-то делала с файлами, то этим хуком мы бы заблокировали выполнение. И тогда, не знаю, либо он бы сделал аналогично, либо всё-таки сказал: "О'кей, не буду". Ну, по крайней мере, у меня получилось продемонстрировать, как, в принципе, работают хуки.

О'кей, обзорно со всеми сущностями разобрались. Но я, конечно, понимаю, что после такого обзора в голове полная каша, как этим адекватно пользоваться, ну, не совсем понятно. Давайте какое-то, ну, обобщение сейчас дам, чтобы, ну, хотя бы немножко у вас это в голове уложилось.

С промтами, наверное, всё понятно. Ну, пишем запрос в чат агенту. он его выполняет. Всё, мы как бы счастливы, всё хорошо.

С командами, ну, плюс-минус тоже понятно, да, выносим в команды какие-то повторяющиеся действия, которые, ну, достаточно простые, и каждый раз их описывать не нужно. То есть туда можно записывать какие-то инструкции, плюс формат ответа. Короче, сохранённые промты, которые мы часто используем. Вот если очень грубо говоря, да.

Потом курсор агент тоже, в принципе, понятно. Это просто диалог с агентом. В нём мы работаем, когда хотим, чтобы нейронка нам что-то сделала. Вот и всё. Вот он основной агент. Тут как бы тоже дополнительных пояснений особо не надо.

Субагенты. Классная фишка, чтобы изолировать контекст и не засорять чат одного агента. Если вы вдруг понимаете, что вы работаете вот в одном чате и у вас на проекте, ну, моментально просто весь контекст засоряется и вы не можете там три промта нормально написать, потому что контекст забивается до сотки, то вот вам решение. Используем субагентов, чтобы работа выносилась в отдельный контекст и мы получали только результат в наш основной чат с агентом. О'кей, тоже понятно.

Правила. Тут, я надеюсь, тоже, в принципе, ясно. Задаём какие-то ограничения, пишем, что делать, что не делать. Достаточно коротко, чётко понятно. Можно там структуру описать. О'кей. Ну, правило есть правило, да? Правила мы используем, когда вы понимаете, что курсор уже десятый раз, э, делает что-то неправильно. И это вот звоночек, что, возможно, стоит вынести в правило, чтобы он перестал так часто делать одни и те же ошибки. Ну, либо просто то, что вам не нужно. Вот хорошо, да, хорошее объяснение правилам.

Скилы, если вы понимаете, что у вас какой-то процесс с нейронкой повторяется несколько раз, тоже звоночек, да, что можно описание этого процесса, как его правильно проходить, вынести в скилы. Плюс к этому, да, помним, что в скилах можно создавать скрипты. В нашем примере скрипт нейронка создала нам на JavaScript. Но это не обязательно должен быть JavaScript. Это может быть какой-то SH или там Bash файл, то есть скрипт, который вот буквально в терминале какие-то команды выполняет. Вам даже не обязательно в этом всём разбираться. Вы просто можете попытаться представить, что он может сделать и попросить нейронку его написать. Ну давайте пока что так на этом ограничимся.

Хуки, если вам нужно что-то сделать в какой-то момент времени, вот вы точно понимаете, да, что вот агент закончил работу, я хочу её провалидировать. Это хук. Если вы понимаете, что там, например, перед началом работы агента вам тоже нужно что-то проверить, тоже используйте хук. Ну и так далее. Там, если вы хотите проверить безопасность команды, качество работы агента и так далее. То есть, если вы хотите что-то сделать в определённый момент работы агента, это хук.

Слушайте, ну, вроде более-менее раскидал, да. Я не знаю, насколько понятны были примеры, которые я приводил, и насколько они универсальны. Ну, типа в целом норм. Ну, насколько это было доступно, решать уже вам. Но я надеюсь, что вот последняя вот эта пометка, она всё-таки внесла какую-то, пускай даже небольшую ясность.

Сейчас что мы сделаем? Я кратко расскажу про MCP, потому что видос очень большой получился. И потом, ээ, покажу какую-то свою, пускай сырую, но вроде бы рабочую связку из всех этих субагентов, хуков, правил, скилов. Её нужно ещё дорабатывать, но продемонстрировать, наверное, получится. Ну, просто как пример работы вот этого комбайна. А связка заключается в том, что у меня создано несколько субагентов. И когда я отправляю какую-то большую задачу в агента, то запускается сначала субагент-планировщик, который расписывает это всё на подзадачи. Потом для каждой задачи запускается субагент имплементер. После того, как он завершил работу, запускается проверяющий субагент, который смотрит, всё ли корректно. Если нашёл какие-то ошибки, то запускает фиксера, и это всё крутится, пока весь список задач не закончен. Вот там используется полный набор из всех этих возможностей. На самом деле правила там не используются, да. Там используются агенты, естественно, субагенты, скилы и хуки. Вот. А правила, ну, в принципе, с правилами, наверное, всё понятно. Это достаточно простая тема, как мне кажется, и надеюсь, я её доступно у меня получилось её объяснить.

Что такое MCP? MCP - это как расширение в браузере. Ну, то есть как расширение для браузера. Только MCP для нейронки. MCP - это, вообще говоря, протокол. То есть расшифровывается это как Model Context Protocol. По названию можно чуть-чуть догадаться, что это такое. То есть это протокол для контекста в нейронку. Ну, короче, что-то в таком духе. Вот. На самом деле, когда говорят про MCP, часто используют, в общем, скажем, связку между нейронкой MCP-сервером, потому что есть Model Context Protocol. То есть это протокол, по которому работает вот эта связь нейронки и сервера. Вот получается, как есть какой-то сервер, который может

делать определённые действия, выдавать, например, какую-то информацию, да, в MCP нейронке указывается методы, ну, ручки, за которые можно дёргать, чтобы получить эту информацию от MCP сервера. Вот.

Ну, надеюсь, примерно понятно. Нашёл какую-то картинку для чуть более понятного объяснения. MCP сервера - это, ну, вот какие-то сервера, например, почтовые, там календарь какой-то для работы с файлами, сиремка, кстати, тоже может быть. Там какие-нибудь базы данных, Фигма, ээ, либо много, много, много чего ещё. В общем, разновидностей этих MCP куча.

Есть клиент, ну, в нашем случае это EGН. Здесь тут написано CLД, chatчат GPT AI agent. Э-э, в нашем случае это будет, ну, курсор с нейронкой, да, под капотом, который будет через MCP протокол получать доступ к какому-то MCP-серверу, чтобы, ну, с ним как-то взаимодействовать.

О'кей, давайте, ну, самый базовый MCP, наверное, который можно придумать - это Котек 7. Коex 7 MCP. Если вы смотрели мой полный гайд по клод-коду, то там я как раз его и показывал. Ну, давайте я покажу его. Это такой MCP, который предоставляет документацию по библиотекам. В принципе, как вы могли понять, эту документацию можно, в общем-то, руками запихать в разделе documentation, indexing and docs. Но это же нужно руками делать, правильно? И каждый раз новую библиотеку нужно так запихивать. Ну, в принципе, можно и так, на самом деле, неплохой вариант, но можно воспользоваться MCP сервером Котек 7 и добавить его в курсор, чтобы он мог через этот сервер получать документацию. Вот. Э, есть такой вариант.

Давайте посмотрим, как он устанавливается. Во-первых, в нём нужно зарегистрироваться, потому что он работает по апи ключу. Ну и вообще, вы, допустим, столкнулись с каким-то MCP-сервером, допустим, это другой сервер. Что надо сделать? Да, нужно найти где-то раздел installation. А часто там показана инструкция для разных инструментов. Нам, например, нужен курсор. Мы смотрим install in курсор. И здесь, в общем-то, подробно написано, что нам нужно сделать. Нам нужно перейти в сетинги курсор Settings. MCP Addne New Global MCP server. Ну, Global там, по-моему, нету сейчас такого. Ну, давайте вот MCP. И да, здесь у нас есть просто add custom MCP сервер. Мы можем это сделать.

Что нам надо сделать дальше? Можем на него нажать, да? Смотрим. Курсор Remote Server Connection и курсор Local Server Connection. Это два варианта подключения, да? MCP можно подключить локально, можно подключить удалённо. Что это значит? Как мы видели на этой картинке, да, MCP - это, в общем-то, просто протокол, а есть сервера. То есть нашему и и агенту нужно через этот протокол подключаться к какому-то серверу. Вот этот сервер может быть удалённый, то есть запущен, ну, где-нибудь там, не знаю, у Гугла или у Котек 7, например, да, тоже вот свой сервер есть, к которому можно подключиться вот, собственно, по этому адресу. И нам не нужно запускать его локально у себя на компьютере, но можно и запустить, да, то есть через команду NPX это часто делается и запускается сервер, по сути. То есть, ну, вы это, скорее всего, не видите визуально, но, грубо говоря, что происходит? Этот сервер запускается у вас на компе, и вместо того, чтобы отправлять запросы на официальный сервер, там contex 7, мы будем слать запросы на свой MCP сервер. Не знаю, чем конкретно в Contex 7 отличается локальный удалённый сервер. Всё равно нужно делать внешние запросы для получения документации. Ну, может быть, локально он там сразу в документацию запрашивает, не знаю. Здесь вроде бы этого не написано. Ну, давайте пока воспользуемся удалённым.

На самом деле вот здесь какой момент? То есть если можно запустить локально, в принципе, лучше запускать локально, потому что каждый раз, когда вы обращаетесь к MCP-серверу, вы вызываете оттуда какой-то метод. Вот если это просто метод на получение, как, например, в Contex 7, то, в принципе, ничего страшного. Но если MCP-сервер обрабатывает ваши данные, то, соответственно, нейронка отправляет туда какие-то данные из вашего там диалога, э, ну, чтобы их MCP-сервер обработал. Вот. И здесь, в общем, нужно понимать по ситуации. Хотите вы отправлять свои данные в удалённый MCP-сервер, доверяете вы ли ему или нет. Вот, э, с локальным сервером в этом плане, ну, типа, попроще, вы данные не отправляете. Но с другой стороны, MCP- сессервер может запускать какой-то код у вас на компьютере. То есть хорошо, если это проверенный open source сервер, да, и он несёт каких-то явных угроз, но при этом потенциально нужно иметь в виду, что MCP-сервер, который вы запускаете у себя на компе, он имеет доступ к вашей там файловой системе. Он может что-то сделать у себя под капотом. Поэтому, наверное, лучше использовать удалённый.

Короче, давайте подключим удалённый MCP сервер context 7. Копируем вот эти настройки. Дальше, что нам нужно сделать? Открыть в настройках нашего курсора Settings раздел Tools and MCP, нажать New MCP server. Здесь у нас открывается JSONфайл, и нам нужно вот этот contact 7 прописать в объект MCP Servers. Обратите внимание, что здесь у меня уже подключены другие MCP сервера. Я сейчас их поскрывал, чтобы свои ключи не палить. Поэтому параметр MCP Servers у нас уже есть. Кстати, он тут дублируется, и это, наверное, косяк. Ну ладно, пока что не будем обращать на это внимание. Нам нужно добавить Contex 7 внутри MCP сервера. Скопируем вот внутреннее содержание этого КоEx 7 и добавляем новый объект сюда. После него нужно поставить запятую, потому что дальше у нас идут другие поля. Если дальше поля не идут, вот, допустим, FigMtop, да, после него нет других полей. Запятая здесь не ставится. А теперь здесь нужно прописать наш IP ключ. Давайте это сделаем. Для этого нам нужно что? Во-первых, зайти в Контек 7. Я авторизовался через свой Google аккаунт. Здесь нужно создать апи ключ. Вот они. А ключи. Их можно использовать бесплатно. Ну, по крайней мере, вот до 1.000 запросов. Нам этого вполне хватит. Напишу for video у себя пометочку держать, что его надо ударить. Вот мы создали ключ. Я могу его скопировать. Переходим обратно и вставляем сюда апи ключ. О'кей, класс.

Ну, мы типа по настроили MCP-сервер. Смотрим в Cрsor Settings. Контек 7 появился в списке. Теперь мы, по идее, можем к нему обращаться. Конк 7, да, это MCP, который позволяет запрашивать документацию по библиотекам. Давайте попробуем это сделать. Найди, пожалуйста, с помощью MCP Contex 7 документацию по React JS. О'кей. Это прямое указание, да, MCP Конtx 7 использую просто, чтобы посмотреть, что он работает. А на самом деле, да, можно так это и делать. Допустим, вы разрабатываете приложение на каком-то конкретном языке программирования, фреймворке, используете какую-то библиотеку и можете прямо указывать, что используй такой-то MCP, чтобы получить документацию по соответствующим библиотекам.

Теперь курсор хочет запустить наш MCP. Вот он, собственно, предлагает. Мы можем добавить его в low list mcp tool, то есть он всегда будет без спроса запускаться, либо просто разрешить. Ну, в данном случае я ему просто разрешу. В принципе, это такой MCP, который можно добавить в low list, потому что он просто запрашивает документацию. Но я пока что просто разрешу ему выполнить запросы к MCP. Смотрите, первый запрос он уже выполнил. он начал искать библиотеки, которые доступны в Контек 7, и после этого нашёл конкретную библиотеку по Реакту, после чего, собственно, запросил документацию конкретной библиотеки. И вот он что-то там получил. Дальше говорит, что вот доступны такие-то документации. Что это значит? Это значит, что теперь нейронка, ну, по крайней мере, в этом чате после этого запроса знает про существование документации по реакту. И можно ей либо прямо указывать, что нужно исследовать, либо она сама будет как на референсы смотреть на документацию и писать нам код, руководствуясь этой документацией. Ну, конечно, с ней неронками дело такое. Лучше явно указать ей, что нужно делать, потому что если вы ждёте, что она сама догадается, то она догадается не всегда. Иногда догадается, иногда нет. Если можно, лучше прямо указать, что ей нужно. Сделайте, что вы от неё ждёте. Вот так работают MCP. Вот с помощью MCP мы получили документацию по реакту. Это особенно важно, если вы работаете с какими-то библиотеками не сильно популярными, да, и нейронка, например, плохо обучена на конкретном языке программирования или мало знает про конкретную библиотеку, которую вы используете. И в таком случае вот можно использовать, например, MCP Contex 7, чтобы она запросила документацию и такая: "А вот как это надо делать? Здесь есть такие-то методы у таких-то функций, можно использовать так-то, так-то или там здесь есть такие-то компоненты с такими-то параметрами, их можно вывести так-то, так-то, прописать такие-то параметры. Короче, это вот пример с КонEx 7 MCP очень много. Подключаются они все, ну, примерно аналогичным образом или там написано, как они подключаются. Иногда вам нужно параллельно в терминале запустить ещё какую-то команду, чтобы этот сервер заработал. Например, для MCPCN, если что, это, ну, грубо говоря, библиотека компонентов. Там очень много компонентов, не только официальных, но и пользовательских, которые туда пользователи загружают, которые можно взять и как бы скачать в свой проект. И у неё тоже уше есть MCP. Чтобы его запустить, смотрим, да, что нам нужно? Во-первых, запустить вот эту команду в терминале это делается. Во-вторых, настроить конфигурацию. Собственно, вот мы её уже видели с вами аналогичную, да? Есть поле MCP Servers, которое представляет из себя объект. И, короче, нам нужно добавить вот этот в наш файл с MCP серверами. То есть мы его добавляем, запускаем вот эту команду, которая до этого показывалась. Вот она. И, собственно, у нас есть доступ к MCP серверу. Всё классно. MCP- великое множество, и про них тоже отдельное видео можно снять. В общем, это такое расширение для вашей нейронки. С помощью MCP можно дать возможность нейронки открывать там браузер, хотя курсор уже это делает. Но есть, например, Play Wright MCP, который делает это по-другому. Он может там открыть браузер, скриншотить, если в курсоре это, например, не особо актуально. Там сейчас вроде как есть браузер, и он тоже может делать скриншоты, но, как мы видели, не всегда идеально он с ним работает. А, например, Playgite MCP, может быть, работает лучше. Да. Ээ можно использовать его, например. Причём также можно использовать его для типа для тестов, да, вот в хуке прописать, что после того, как был внедрён новый компонент, нужно открыть там Play WR MCP либо там в курсоре браузер и посмотреть, что он корректно отображается. Неронк всё это сделает, посмотрит, ага, корректно отображается, и скажет корректно. Если нет, то там типа надо исправить. Ну, прописать, короче, эту инструкцию в хуках. Вот так вот можно делать, например, да. У Фигмы ещё есть MCP. Его тоже можно подключить, но аналогичным образом и скидывать в чат курсору ссылку на компонент в Фигме. Там по компоненту можно правой кнопкой тыкнуть и типа click link to component, да, или to section скинуть курсору, и он через этот MCP смотрит на стили в Фигме, да, и может по дизайну вам что-то рисовать. Короче, MCP очень много, очень много. Это как расширение и а типа можете погуглить, короче, разные MCP сервера по необходимости. Вот с MCP, надеюсь, разобрались. Ээ я так ужато рассказываю, потому что уже очень много материала. И если я про всё буду подробно расписывать, будет, конечно, тяжело. Вот. Но, по крайней мере, вы будете знать в принципе про все эти возможности. Если у вас возникнет какой-то особый интерес к определённому функционалу, то вы сможете, в общем-то, погуглить про это всё более подробно. Вот. Но базово, я надеюсь, что я вам рассказал про все эти возможности по нашему плану. Мы, в принципе, ну, базу всю закрыли.

Давайте я теперь попробую сюда в наш курсор закинуть, собственно, своих заготовленных агентов и всё остальное. И чуть-чуть вам про это расскажу. В общем, я закинул сюда в проект свои все сущности, над которыми я сейчас работаю. У нас появилось много агентов. Давайте я по ним пробегусь, просто по назначению. Смотрите, есть ревьювер архитектуры, который смотрит на структуру папок, файлов кода и даёт свою оценку, говорит, что лучше исправить. Есть дебагер, который проверяет ошибки. Ну, если что-то сломалось, то он дебажет проект и пытается это пофиксить. А есть документер. Это агент, который документирует изменения. На самом деле я за всё видео не упомянул про документацию. Ну, во-первых, это реально отдельная большая тема. И если уж мы разбираем курсор, то всё-таки это не выходит на первый план. Это больше про workflow разработки. Здесь мне хотелось именно программу разобрать. Про документацию есть отдельное видео, я уже об этом говорил. Вы можете её посмотреть. Его, в общем, поддержание документации достаточно важная часть процесса разработки. Если вы работаете с иагентами, то вам нужно это фиксировать. То есть в одном файле вы описываете там идею проект, в другом файле вы описываете, как должна выглядеть главная страница, в третьем файле вы описываете какие-то принципы дизайна, ну и так далее. То есть таких описаний нужно достаточно много. И это формирует представление у нейронки о том, какой вы проект делаете, как он должен выглядеть, как он должен работать. То есть в документации описывается всё, как вы это видите. По сути, это много файлов, которые представляют в сумме собой какое-то большое техническое задание. И вы эти файлы можете прокидывать нейронки в контекст и говорить, что вот смотри ТЗ, давай делай. С таким подходом, в общем-то, разработка становится проще, потому что вам не нужно каждый раз описывать нейронки, что вы хотите сделать. У вас это всё уже задокументировано в документации.

О'кей, погнали дальше. Оркестратор тоже интересный агент. Оркестратор должен, ну, как бы управлять там этими агентами, вызывать одного, потом, когда он закончит, вызывать второго и, в общем, крутить цикл, если задача достаточно большая. Затем есть агент-планировщик, который большую задачу расписывает по маленьким. Агент Рефактор, который рефакторит код. Время от времени это стоит делать, прогонять нейронку по тому же коду, который она же сама и написала, и просить её всё отрефакторить, то есть привести в достойный вид, скажем так, да. вынести какие-то общие компоненты, общий код в отдельные файлы, что-то там подправить, подшлифовать и так далее. То есть, чтобы всё это было структурировано и красиво. Вот что такое рефакторинг. Ну, оптимизировать код, в том числе, да, ускорить работу проекта и так далее. Revвw - это ревювер, который просто ревьювит код. То есть я его запускаю, когда мне нужно проверить какой-то кусок кода, какой-то функционал, и я могу запустить его. То есть после каждого сложного какого-то внедрения имеет смысл запускать ещё отдельный ревьювера, который пройдётся по только что написанному коду и скажет: "Код написан хорошо или код написан не очень хорошо и нужно исправлять". Также есть секюрити аудитор, который проверяет безопасность, есть агент, который запускает тесты и verifер, который, ну, в общем, верифицирует, всё ли о'кей или не о'кей. Он достаточно простой. То есть, когда задача помечена как сделана, запускается verifа и говорит, всё ли о'кей, всё ли, ну, типа, сделано или не сделано.

О'кей. В командах ничего не добавилось. В хуках, да, появилась папочка хуков. Здесь в общем, несколько файлов - это скрипты. Это те скрипты, ну, которые, по сути, представляют себя какой-то баш SH, срипт. Короче, это то, что команды в консоли выполняются, да, последовательно. Они также могут запускать каких-то агентов или писать в чат нейронки какое-то сообщение. А, ну давайте посмотрим, например, какой-нибудь, можно простого какого-нибудь агента. Короче, например, да, здесь есть поле, которое выводится, это followup message. То есть это сообщение, которое после выполнения этого хука будет отправляться в чат. Вот, то есть он, например, может вот документер. Видите, да? Это по сути запуск вот этого документера вот такого, да? Он запускает этого документера, ну, пишет вот это сообщение и говорит, что нужно задокументировать какую-то, ну, в общем, нововведение, о'кей? Либо зафиксировать просто какой-то отчёт у нейронки и так далее. То есть есть набор SH команд. Ох, не знаю, стоит ли в них погружаться сейчас. На самом деле, наверное, нет. Просто имейте в виду, что эти команды можно написать с помощью нейронки, то есть описать ей, что вы хотите. И эти команды будут запускаться, когда вы их пропишите в filhooks.jon. То есть то, что они просто находятся в папке hooks. Ну, это типа группирование в папку, но сами по себе они здесь ничего не делают. Они запускаются, когда вы их вот в файле hooks.jonjon прописываете и говорите, когда и какой скрипт нужно запустить. Вот. А в этих скриптах вы уже можете делать что угодно. Можете анализировать проект, можете запускать какие-то команды в консоли, тестировать там, не знаю, форматирование кода, что-то ещё проверять. Ээ возможностей там, короче, дофига. Вот просто, ну, практически всё, что вам нужно, там, скорее всего, можно сделать. Вот. И вы можете описать это нейронке и попросить её, собственно, запилить такой скрипт для вас и добавить его после этого в хуки. В принципе, и в Хуке вы можете тоже через нейронку это добавить. Сказать, что добавь мне это в хуки, пожалуйста, чтобы оно запускалось тогда-то и тогда-то. И нейронка, в принципе, всё это нормально понимает.

В общем, по итогу что можно сделать? Можно сделать такого оркестратора, которому вы даёте какое-то огромное ТЗ, и он гоняет субагентов, пока не выполнит это ТЗ. Ээ это не какая-то новая идея. Таких разновидностей циклов, наверное, достаточно много. Можно написать под себя, можно поискать какие-то готовые решения. Конкретно эти файлы я сначала допилю, проверю. Не знаю, насколько они вообще сейчас сработают. Я попробую сейчас какую-нибудь задачку кинуть. Блин, я снимаю этот видос уже часов 600, наверное, если не семь подряд. Я поэтому вообще жёстко устал. У меня ночи на часах. Извиняюсь, что я уже такой убитый под конец видео. Сейчас, кстати, у меня почему-то не подтянулись новые агенты. Мне пришлось перезапустить курсор. Короче, во-первых, я использую агента оркестратор. Я его запускаю, чтобы ему всю эту задачу полностью выдать. И теперь давайте придумаем какую-нибудь супер жёсткую задачу. Короче, жёсткая идея. Сейчас все офигеете. Смотри, сейчас у нас в проекте тестовые просто страницы. Нужно всё переделать. Сделать полноценную документацию по агентам, хукам, правилам, скилам и командам в курсор ИД. сделать соответствующие разделы на сайте, под каждую сущность сделать отдельную страницу, всё перелинковать, написать полную документацию, как что использовать. При этом написать максимально простым языком, чтобы даже люди, кто не связан с разработкой, поняли, как этим пользоваться. Дать примеры использования, примеры каждой сущности, то есть примеры агентов, команд, хуков, правил, э скилов. Вот. И ещё составить на отдельной странице рейтинг топовых MCP серверов. Вот такой у нас будет промт. Только его надо немножко подредачить, некоторые термины MCP серверов. Э, да, в принципе, в остальном, наверное, пойдёт, да? Погнали. Посмотрим, как он с этим справится. Честно говоря, это, ну, смертельный номер, так сказать. Я не знаю, что сейчас будет. Давайте посмотрим.

Пока он думает, скажу ещё пару слов напоследок. Да, сейчас мы вообще, ну, во-первых, поглядим, что он нам выдаст. По идее, он должен, ну, кстати, правила Project Structure посмотрел, молодец. Вот начал какие-то субагентов запускать. Э, интересно. Ладно. Э-э, помимо того, что у нас появилось много чего в папочке курсора, здесь у меня ещё появилась папка AI Docs. Это моя собственная папка, в которой я храню документацию по проекту. Я уже сказал, что лучше всего документировать все функции, какие-то экраны, тэшки и так далее. Я это записываю в папке AI Docs. У меня здесь есть три вложенных папки. Это дизайн. Здесь написано то, что, ну, по дизайну, короче, важные штуки, какие-то стайлгайды, какие-то требования и так далее. А есть папочка маркетинг, в которой описана информация по маркетингу, целевая аудитория, go to marкеet, стратегия и, в общем, какие-то маркетинговые документы. Вот пока что мы на неё смотреть не будем. И ещё одна большая папочка Devil, в которой есть куча других папок. Есть папочка tasks, в которой будут храниться файлы с задачами. Это полезно, если, допустим, мы хотим с нуля запилить огромный проект, да, мы же не будем это всё за один чат делать даже вот с кучей этих оркестраторов. Нет, мы зафиксируем кучу задач от нуля до там полной реализации проекта, напишем какой-то Roadmap и будем по этому Roadmмапуapпу идти. Вот всё это происходит в папочке tasks. Подробнее про это, ну, я даже не знаю, где можете посмотреть, но у меня есть серия видео, где я вместе с вами вайпкожу сервис для генерации стайлгайдов. Вот там похожий подход используется. Вот это уже более расширенная папка, но тем не менее там всё аналогично. В папочке Screens создаются аски визуализации каких-то экранов. Давайте я пример сейчас покажу. Вот пример с другого проекта. Это, собственно, мой сайт, который я вам до этого показывал. Здесь вот в таком формате аски визуализация сделана, содержание страницы, то есть набар, потом, ну, изначально там просто переключатель языка был, потом стал навбар, потом идёт какой-то градиентик, моя аватарочка, моё описание, карточки. Ну, в общем, если вы посмотрите на главную страницу моего сайта, то в целом структура абсолютно такая же. Давайте посмотрим, что у нас есть дальше. Есть папочка reports. Там у меня хранятся отчёты нейронок после проделанных задач. Есть папка is - это когда я нашёл какую-то проблему и мне нужно её зафиксировать. Я не готов её сейчас фиксить, но её нужно будет исправить. Короче, записываю в папочку isс. В папке features описано какой-то функционал разных фичей. В components, соответственно, UI компоненты. В апе, соответственно, описана апишка. Ну, то есть эээнд, там запросы на получение редактирование данных, такое вот. И здесь, в общем-то, я храню всю документацию примерно в таком формате. На самом деле для этого есть разные тулы, которые помогают это как-то оптимизировать в плане работы с документацией, там всякие спеккиты и тому подобные. Ну, можете поискать эту инфу, в принципе, тоже вариант, да. Ну я вот по привычке просто делаю это руками, создаю папки, которые мне нужно, а точнее просто копирую их из заранее заготовленных там один раз и всё. И дальше я с ними работаю. Ну мне сейчас так удобно. Возможно, через какое-то время я всё-таки перейду на какое-то готовое решение, типа GitHub SPC Kit или что-то тому подобное, но это не отменяет работоспособности, в общем-то, своих папок, которые можно настроить под себя. Они вполне хорошо работают. Потом можно на эти файлы документации ссылаться в правилах. Тоже вот важный момент, да, от того, что мы просто создали папки с доками, ничего не произошло. Но если мы на конкретной документации будем ссылаться, например, в правилах для курсора и говорить, что если ты редактируешь какой-то дизайн, то ты обязательно посмотри на описание дизайна нашего проекта, то это, ну, отчасти ему поможет. Иногда также нужно будет ему явно указывать это прямо в промте или ещё как-то. Но, по крайней мере, это его хоть немножко направит в эту сторону, и он будет туда смотреть.

О'кей. Это, наверное, вся теория вот на сегодняшний день. Пока у нас там активно думает оркестратор, мы можем, в принципе, кстати, глянуть, что он делает. Пока что получается, что, наверное, у меня просто сам оркестратор всё это делает сейчас. Это, наверное, не очень корректно. То есть, по идее, он должен запускать дополнительные субагенты. Сейчас пока что этого не происходит, но я говорил, что у меня пока что ещё сырые вот эти файлы и их нужно допиливать. Я, когда допилю всю эту связку, я залью это всё на сайт и, наверное, отдельно какое-то видео под это сниму. Но опять же, это не отменяет тот факт, что, в принципе, вы можете самостоятельно всё это настроить, как вам это нужно. Про все эти разделы и функции я как смог рассказал. Так что сейчас дождёмся, когда оркестратор нам что-нибудь сделает. Посмотрим, что у него получилось и получилось ли вообще, учитывая, что он всё это начал делать, ну, похоже, в своём контекстном окне, то есть без разделения на несколько субагентов. Не знаю, насколько хорошо у него это получится, но обратите внимание, что основной контекст чата заполнен всего на 2,5%. То есть, ну, удобно, да, что субагенты так работают. Единственное, что здесь должны вызываться несколько субагентов. Это, конечно, пока что недоработка моя, да, но это всё вполне реализуемо.

Ну что, агент закончил выполнение задачи. Да, сделал он это не так, как я от него вообще это ожидал. То есть он всё в одном оркестраторе сделал. Э, собственно, вот он история действий оркестратора. Никаких дополнительных субагентов он не вызывал. Короче, это всё мне надо докручивать, допиливать. Ну, давайте посмотрим, что у него получилось. Вот такую страницу он сделал. Полный гайд по курсору. Начать изучение. Вы посмотрите, все агенты. Он добавил сюда моих агентов. Вот это прикол, конечно. Потом э сделал хуки. Вот они пример хуков. Все хуки. Ну, слушайте, достаточно неплохо, учитывая, что сделано это всё буквально за один промт. Буквально там до этого была какая-то просто тестовая заглушка, и вы посмотрите, что у него получилось. Он неплохо всё отформатировал, добавил какие-то системы правил, описания, как это создать. Cрсор rules. Ну, то есть, по сути, это то, что я вам рассказывал. Короче, примеры правил. Что ещё тут есть? Какие-то проджект структуры. Ну, это уже пошли конкретные правила с их описанием, как создавать правила. Блин, ну это интересно. Определите стандарты кода. Единый стиль для всех разработчиков. Задайте новые стандарты для улучшения кода при рефакторинге. Для получения документации Conventionшн. Правила как документация для ай, так и для людей. Прикольно. Скилы он сделал. MCP сервера. Давайте посмотрим, что у нас есть. Во, кстати, под подборку MCP серверов сделал. Капец. Ну, нормально, кстати. Вот файловая система работает. А, ну только это не кликается. Это, по идее, по категориям надо, чтобы было кликаться. Блин, простительно. Он и так много всего сделал. Ну давайте посмотрим, да, какие MCP сервера бывают. Есть файловые системы, база данных, да, для работы, для Гитхаба, для слака дискорда, да. Можно, чтобы отправлял сообщение, кстати. Да, можно сделать, чтобы он отправлял вам в Discord или в слак сообщение о том, что он выполнил какую-то задачу. Вот тоже делаем хук, подключаем MCP сервер и добавляем, ну, типа, в этот хук MCP сервер, чтобы он его вызывал. Прикольно. Тестирование. Вот он playght, про который я рассказывал. Для девопса есть для докера MCшки, для кубернетиса, для Амазона, для документации Noion, да, можно использовать для мониторинга, есть для поиска вот Braй Search, да, хороший MCP, Google. Ну, короче, блин, прикольно, нормальная тема. И вот описание, смотрите, вот по каждому MCP он сделал описание. Блин, ну я на самом деле не ожидал, конечно, такого, но получилось очень даже хорошо. По командам он, соответственно, сделал, ну, он здесь мои команды взял, наверное, да. Это вот команды агентов, которые вызывают агентов и обычные команды. Сосно всё здесь он дальше описал нормально. Правила. А, ну мы их смотрели уже. Хуки тоже вроде смотрели. Скилы GitHub. Ну, здесь ссылка на GitHub курсоры. Ну и агенты. Блин, угарно. по каждому агенту сделал отдельный файл. Молодец. Даже с учётом того, что это всё выполнил один субагент, он справился с этим неплохо. Блин, ну зато получилось продемонстрировать, что вообще курсор может, а то я какие-то тупые примеры там в начале приводил. Ну вот, смотрите, пожалуйста, один промт и полный сайт с документацией. Заняло это там минут 5-10, наверное. Ну дизайн, конечно, простой, но вполне приятный. Ну, то есть это годится, это нормальный дизайн, это воспринимается, всё о'кей.

Ладно, давайте заканчивать. Ээ, я что-то знатно притомился, [смех] так скажем, за 7 часов записи видео. Я рад, что у меня наконец-то получилось это сделать. Я надеюсь, это вам было полезно, и вы подчерпнули для себя что-то новое. Конечно, можно много чего ещё рассказывать про каждую из этих сущностей, про все эти настроечки, но, блин, в одно видео это никак вообще не влезет, в принципе. Ну, базу я как бы вроде дал. Надеюсь, дальше справитесь. Поводу файлов для оркестрации я с ними разберусь, закончу, закину. Ищите ссылку либо в описании видео я её добавлю. Ну, либо подписывайтесь на Telegram-канал, там я тоже обязательно это опубликую. Да, вот у нас есть Telegram-канал Годный Вайб-кодинг. В нём я публикую полезные материалы по вайб-кодингу. В частности, вот такие файлы закидывать буду и так далее. Там видосы скидываю. У нас есть вайп-кодерский чатик. В нём можно пообщаться с другими вайп-кодерами, позадавать вопросы, поотвечать ответы. Иногда там пишут какие-то предложения по проектам. Ну, было дело, да. В общем, подключайтесь к нашему вайпкодерскому комьюнити. Всем будем рады. Ставьте лайк, если это видео вам понравилось и вы хотите, чтобы YouTube рекомендовал вам больше полезного контента. Подписывайтесь на YouTube канал, чтобы не пропустить новые видео. Подписывайтесь Telegram. В общем, на этом я с вами прощаюсь. Всем годного кода и до скорых встреч.