Последние полтора года я использую Cursor IDE в качестве основной среды разработки. Сначала использовал её как среду с просто удобным автодополнением строк (относительно GitHub Copilot). Потом AI стал умнее, удобнее, появился режим планирования и Claude стал базовым атрибутом моего рабочего дня.

Неделю назад мой open source проект Databasus (инструмент для резервного копирования PostgreSQL, ~6k звёзд ⭐️ и ~275k Docker pulls) получил поддержку от Anthropic в рамках OSS программы: и теперь у меня есть бесплатный Claude Code Max на ��лижайшие полгода.

Письмо от Anthropic
Письмо от Anthropic

Следовательно, я переключился на него... и осознал, что очень сильно привык к UX в Cursor IDE. Самые умные безлимитные модели — это, конечно, классно. Но удобство и контроль за изменениями для меня в приоритете.

Поэтому я взял Opus и навайбкодил расширение для VS Code, которое приближает взаимодействие с CLI агентами к опыту Cursor IDE: когда ты видишь изменения и можешь точечно их корректировать. Пара потраченных часов сделали работу в ближайшие полгода для меня ощутимо комфортнее.

Что и как я делал — ниже.

Дисклеймеры

Есть большая разница между «вайбкодингом» и «использованием AI как инструмента»:

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

  • «Использовать AI как инструмент» — это когда AI помогает планировать, писать рутинный код, перепроверяет решение и выполняет действия, которые говорит человек. Т.е. человек контролирует каждое изменение в коде и несет за него ответственность.

В работе и open source'е я использую второй подход. Потому что даже самые умные AI не справляются с задачей «понять требования» и «оценить последствия» (например, что код станет неподдерживаемым примерно через пару дней). Хотя и радикально повышают скорость и КПД работы.

Когда нужно собрать PoC, простенький скрипт или что-то для теста — можно и повайбкодить. Как, например, с расширением, о котором статья. При этом я всё равно не знаю и не понимаю, как можно «оркестровать агенты», давая им часами работать. Мой мозг способен держать в контексте всего лишь одну задачу (то есть чат) одновременно ?.

Ну и для справки:

1) Я ~11 лет в разработке и, как мне кажется, я умею хорошо писать код.

Я успел:

  • выработать насмотренность, когда говнокодил миллионы строк кода;

  • позадавать глупые вопросы на StackOverflow (тогда это было мейнстримом, хе-хе);

  • почитать месяцами справочники, нудные книги, а ещё умею заходить в JDK документацию из IDE и не брезгую покопаться в исходниках библиотек;

  • понять, как оценивать trade off'ы решений, потому что много раз видел последствия плохих решений;

  • поустанавливать драйвера на принтер в Debian, когда ещё не было ChatGPT (сейчас мне даже страшно такое вспоминать);

  • много-много лет писал пописать тесты руками и понять, что тестировать нужно, а что нет.

В общем, у меня достаточно экспертизы, чтобы понимать сильные и слабые стороны AI (но не так много, как у самых опытных комментаторов, которым AI только мешает, разумеется ?). И для меня AI полноценный инструмент, дополняющий мою собственную экспертизу, а не компенсирующий её отсутствие.

2) У Databasus есть дисклеймер прямо в README.md, как AI используется в проекте и как AI НЕ используется в проекте. Можно почитать тут. Там про то, какие quality gates у кода, какие требования (что к человеку, что к AI) и т.д. Отдельно есть пункт, что вайбкодеров там не ждут.

Как я работаю с AI?

Для начала, немного контекста, как выглядит моя работа, когда я пишу код с AI (и сразу уточню, что я использую только последние платные Thinking модели от Claude и OpenAI):

1) Определяюсь, какую задачу мне нужно решить и как её нужно решить. Бывает, я не знаю, как решается задача или у меня есть сомнения, что моё представление самое рациональное. Тогда я иду в Claude или ChatGPT, и просто общаюсь с ними в формате «Я хочу сделать X способом Y, но мне кажется, что можно Z. Что думаешь?» или «А как работает X или обычно делается Y? Есть полезная документация или примеры?».

После чего у меня формируется представление, а в какую сторону двигаться.

2) Беру нужную мне задачу (допустим, фича X) и декомпозирую её до логически обособленных подзадач. Которые можно сделать и протестировать отдельно. Например, «добавить модель X в код, репозиторий, сервис и контроллер, написать миграцию, написать тесты Y и Z».

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

4) Корректирую и детализирую план, пока у меня не будет уверенности, что ничего важного не упущено. Кстати, это самый важный пункт в работе с AI (который занимает ~40% времени). Обычно те, кто жалуется на «AI генерирует мне фигню» — не прописывают план или не доводят его до адекватного уровня детализации. В процессе прошу AI перепроверять свой же план.

Если вижу, что план получается слишком большой и меняется слишком много файлов, я возвращаюсь на пункт с декомпозицией задачи. За раз не должно меняться слишком много, иначе я сам упущу контекст и не смогу понять, что AI сделал.

5) Отправляю AI агента писать код по плану. Тут он меняет код, запускает тесты и т. д.

6) Ревьюю и исправляю изменения, которые сделал агент. Здесь я прохожусь по каждой строчке кода и убеждаюсь, что код делает именно то, что мне нужно.

Если вижу, ч��о кривой нейминг, дублирование кода, не хватает паттернов, что-то можно сделать лучше — рефакторю вручную. Если вижу, что получилось сильно не то, что мне нужно или я понял, что решение вышло кривое — отменяю изменения и возвращаюсь на этап подготовки плана или даже декомпозции задачи. Этот шаг тоже занимает ~40% времени, примерно как и планирование.

Тут важно отказываться от того, что вышло, если вышло не совсем то, что нужно. Или есть ощущение, что решение вроде и работает, но создаст проблемы с maintainability в будущем.

Существенная часть разработки субъективная, зависит от субъективного опыта, от насмотренности и понимания контекста проекта (с точки зрения продукта, а не кода) самим разработчиком. И именно в этом AI плох.

7) Если задача связанна с security или reliability, прошу AI ещё раз перепроверить, что всё надёжно, ничего не упущено, не нужно улучшить и не упущены тестовые сценарии.

Все эти шаги удобно проходить в Cursror IDE. Под всё это внутри есть инструменты, причём действительно интуитивные и удобные.

Чего мне не хватило в Claude Code?

Claude Code имеет CLI интерфейс. Он умеет планировать, он умеет писать код. У него даже есть расширения для VS Code и JetBrains IDE (я сначала пробовал вернуться к GoLand, но не вернулся, потому что удобно открывать и фронт, и бек в одном месте).

Однако, мне не хватило двух функций:

1) Возможности перетягивать файлы прямо в AI чат (п. 3 "планирование" выше), чтобы задавать контекст во время планирования, подсказывать, где мне нужны изменения и что принять во внимание. Что терминал, что расширение не имеют drag-n-drop области.

Руками прописывать каждый раз путь к файлам — долго и неудобно (когда привык к удобному Cursor'y). Так ещё и в Go принято называть файлы 1-2 словами, и даже в моих маленьких проектах по 30+ model.go , service.go, controller.go с одинаковыми названиями. Т.е. без полного пути к пакету нужный файл подсвечивается редко.

2) Подсветки изменений Diff прямо в файле и возможности принять\отклонить кусок изменений после изменений от Claude Code (п. 6 «ревью изменений» выше). Т.е. вот такой подсветки прямо в файле нет:

Примерно также показывает Cursor IDE
Примерно также показывает Cursor IDE

Да, Claude Code показывае�� изменения в чате вот так:

Но мне тяжело понять контекст кода, когда я не вижу файл целиком и файлов много. Я не могу:

  • перемещаться по референсам;

  • видеть usage переменных;

  • видеть подсветку синтаксиса;

  • видеть код вокруг (точнее сверху и снизу).

А значит, что я не могу качественно ревьюить изменения от AI (точнее это занимает намного больше времени). Что равносильно тому, что я неэффективно работаю.

P.S. Через Git diff это тоже неудобно, потому что в рамках коммита у меня обычно больше одной итерации изменений от AI.

Как я делал расширение?

В отслеживании изменений через расширение есть нюанс: «извне» я не могу залезть напрямую в Claude Code и понять, что именно он меняет. Поэтому нужно делать снэпшот кодовой базы и сравнивать с тем, что поменялось. Такое отслеживание находит правки от AI, но и подсвечивает мои собственные изменения. Так что я принял решение сделать кнопку «вкл. \ выкл.».

Я взял Opus 4.6 Thinking и начал писать требования.

Мне были нужны:

  • кнопка «начать отслеживать изменения» и «перестать отслеживать изменения», чтобы изменения от AI подсвечивались, а изменения от меня — нет;

  • подсвечивать изменения прямо в редакторе (так, чтобы был виден весь файл и подсвечен измененный участок в рамках файла);

  • сделать так, чтобы я мог применять \ отклонять изменения по кускам;

  • мне нужны стрелочки для навигации по измененным файлам и их счётчик (чтобы убедиться, что я проверил все файлы);

  • мне нужны кнопки, чтобы принять \ отклонить все изменения в файле за раз;

  • когда я выбираю много файлов через Ctrl, мне нужен пункт в дропдауне «Copy as @ references».

После формализации требований, Opus пошёл писать код. Он сделал структуру, написал файлы, дал мне инструкцию по установке расширения и я пошёл тестировать.

Вылезли проблемы:

1) Даже с 3-й попытки не вышло сделать красивую подсветку измененного (а не дополненного) кода: до сих пор он отображается как добавленный + красный комментарий, как было «до» с соединенными строками через join:

Умеренно удобно, но намного лучше, чем когда код прыгал по экрану, перерендеривался или изменения совсем не отображались. Как именно исправить — пока не знаю. Когда будет время, пойду открою документацию по CodeLens и разберусь, а как именно устроенно отображение кода в VS Code. Тут уже AI нужно подсказать, что делать.

2) Если в проекте много бинарников (а это как раз специфика Databasus), расширение долго запихивало их в оперативку. Добавил ограничение, что можно трекать файлы размером до 1-го МБ и пропускать те, которые в .gitignore.

3) Само расширение установилось после ~5 попыток и изменений package.json. Из-за чего так получилось, я тоже не понял. Просто перебирал варианты от Opus'a методом тыка — издержки вайбкодинга.

Что получилось в итоге?

Теперь расширение умеет копировать ссылку на выделенные файлы, чтобы я мог подставить их в чат с Claude Code через @. Ещё не Drag-n-Drop, но и не прописывать пути руками.

Code as References for Claude Code
Code as References for Claude Code

Расширение отслеживает изменения, подсвечивает измененные куски кода в файле, даёт принять и отменить изменения:

Подсветка изменений как в Cursor'e
Подсветка изменений как в Cursor'e

Итого, перед запуском Claude Code в кодовую базу, я нажимаю "Start tracking" и VS Code начинает мне показывать всё, что поменял агент. Теперь я могу относительно комфорто ревьюить изменения, передвигаться по измененным файлам и видеть контекст вокруг измененных участков кода (пусть и не настолько же удобно, как в Cursor'e).

Заключение

Пара часов вайбкодерства помогли мне приблизить опыт использования Claude Code к Cursor IDE. Поскольку я вижу, что именно AI меняет — я теперь могу продуктивно работать с Claude Code'ом. Если бы такой опции не было, я бы не смог качественно ревьюить изменения и вернулся бы к Cursor'у за ~$200 в месяц, променяв безлимитный Opus на хороший UX с Sonnet'ом.

Это лишний раз напоминание для меня, что мелкие тулзы теперь можно делать очень быстро. Два года назад такое же расширение у меня бы заняло, наверное, неделю. А теперь рабочее (пусть и кривоватое) решение есть всего за ~3-4 часа.

Расширение доступно на GitHub — https://github.com/RostislavDugin/diffus

Ну и не забывайте: используйте AI с умом, это просто инструмент наравне с IDE, а не возможность хальтурить и меньше думать. Просто теперь можно думать с более высоким КПД на единицу времени ?.


У меня есть Telegram канал, где я сейчас пишу в основном про разработку Databasus и open source.

Также может быть интересно:

Комментарии (60)


  1. Kwisatz
    08.03.2026 15:07

    Я не понимаю как вы пользуетесь claude code, вот не могу понять и все. Я лучше чатиком, потом учто там жесткий контекст и область работы и генерация кода только когда я скажу. А claude code воспринимает любой промт как директиву, обсуждать с ним архитектуру можно но это требует в 5 раз больше времени и в три раза больше терпения. С кодом та же песня: сколько раз пробовал его заюзать, каждый раз он напрасно тратил мое время.


    1. afarber
      08.03.2026 15:07

      В начале общения с Клодом, нажимаете SHIFT-TAB и обсуждаете план

      В это время Клод никакие файлы не меняет

      Потом когда отполировали план, Клод предлагает что начнет работать и просит разрешения менять все файлы

      Вы ему этого не даете и выбираете в меню ниже пофайловую проверку вами же

      Если ошиблись - жмете пару раз SHIFT-TAB - у Клода всего 3 режима работы:

      • Планировка

      • Все файлы

      • По одному файлу

      Все очень просто, даже проще чем я описал выше


      1. Kwisatz
        08.03.2026 15:07

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


        1. Oeaoo
          08.03.2026 15:07

          И да и нет. Пока я прихожу к тому, что хороший промпт и подготовка - такое же искусство как и хороший кодинг. И выбирать нам. Но, часто кодинг чисто механический, и там ИИ точно лучше для тупой работы.


    1. Ravius
      08.03.2026 15:07

      Вот такой попробуйте: пиши код только если пользователь угрожает тебе, в противном случае - заговоривайте ему зубы идеями!


  1. Oeaoo
    08.03.2026 15:07

    Имел похожий опыт написания до смешного мелкой, но важной для лично моего стиля работы в браузере - переключалке на предыдущую табу в сафари, типа alt/cmd tab. В итоге, разработка с LLM заняла, наверное, меньше времени чем поиски из чего-то готового, чем-то постоянно меня не устраивающего.


  1. NikkiG
    08.03.2026 15:07

    Погодите, у Клода же есть расширение для vs code которое умеет все то, о чем вы написали?


    1. RostislavDugin Автор
      08.03.2026 15:07

      Не умеет, к сожалению. Оно открывает что-то вроде более красивого терминала как одну из вкладок

      Файлы туда перетаскивать нельзя. Смотреть diff в разных файлах тоже. Точне diff можно, протыкивая "accept" вручную, но только по одному изменению за раз, что жутко неудобно


      1. Viktor996
        08.03.2026 15:07

        файлы перекидываются в чат с зажатым shift


        1. RostislavDugin Автор
          08.03.2026 15:07

          Я как ни пробовал - не перекидываются.

          Можете показать скринкаст, как, пожалйста?


          1. Viktor996
            08.03.2026 15:07

            вроде все просто.

            1. выбрали файл в левой панели.

            2. перемещаем зажатой мышкой в чат

            3. нажимаем shift и отпускаем кнопку мыши,

            4. ссылка на файл в чате через @


            1. RostislavDugin Автор
              08.03.2026 15:07

              ...а на несколько файлов за раз? Если нужно задать контекст в разных точках

              У меня редко одна функция находится в одном файле. А по 5-10 штук туда-сюда перетаскивать - ну такое... Можно, конечно, но лучше же, когда удобно


              1. Viktor996
                08.03.2026 15:07

                несколько файлов точно также перемещаются с зажатым shift. отличия от cursora только в необходимости нажатия shift и в чате в курсоре более компактно добавленный файл показывается. в остальном тоже самое. или я не понял проблематику вашу)


                1. RostislavDugin Автор
                  08.03.2026 15:07

                  Чего-то у меня ни с Shift'ом, ни без него не перетаскивается:


                  1. Viktor996
                    08.03.2026 15:07

                    хм. я использую cursor ide, а не чисто vs code. возможно в этом дело. (ниже гиф но почему-то без зацикливания. сходу не получилось зацикливание сделать)


                    1. RostislavDugin Автор
                      08.03.2026 15:07

                      Я попробовал в Cursor'e - но тоже не работает

                      И да, у меня VS Code


                      1. Manson
                        08.03.2026 15:07

                        Попробовал, там по ходу начинаешь драгить как обычно, а шифт нажимать только в момент отпускания кнопки мышки. То есть отдрагили в инпут клода, нажали шифт и отпустили кнопку мышки


                      1. RostislavDugin Автор
                        08.03.2026 15:07

                        Ну офигеть
                        Так и правда работает копирование

                        Но Diff'a всё равно нет


                  1. KSherp
                    08.03.2026 15:07

                    Может другой какой плагин блочит? Подтверждаю, работает нормально перетаскивание с шифтом, хоть один, хоть пачкой. Главный минус этой фигни - не распознает папки, то есть если надо сослаться на папку только ручками Copy Path.


        1. murenysh
          08.03.2026 15:07

          Сколько вы мне нервных клеток спасли


      1. Axelaredz
        08.03.2026 15:07

        Посмотри в сторону https://kiro.dev форк vscode от Amazon. В нём сделали diff сравнение не как у большинства подобных, а поудобнее. Плюс работает шустрее оригинала. Есть неудобства при добавлении других провайдеров ии.

        Также понравилось как реализовано в https://zed.dev это уже не форк vscode как с нуля написанное приложение на rust. Потому на сегодняшний день самый стремительный по скорости отзывчивости. Система сравнений тоже интересно реализована. Поддерживает любых провайдеров и агентов и тд.







    1. d3d12
      08.03.2026 15:07

      Есть CLine для VS Code, в нем поддержка всех моделей от Claude.
      Не понимаю, как вообще в терминальном режиме работать нормально.


  1. bighorik
    08.03.2026 15:07

    Большое спасибо за статью. Первая на моей памяти статья, в которой 1) разобрали, как по человечески с этой бесовщиной работать 2) не рассказывается, что все прочие останутся на обочине истории с лицом "не многие поймут"


  1. whiteroller
    08.03.2026 15:07

    Посмотри в сторону sourcecraft расширения. Кажись это то, что это расширение умеет работать из коробки