Дайджесты новостей
Изометрическая 3D-модель окна визуального редактора Cursor с интерактивным флажком аннотации Annotate и подсвеченным блоком кода.

Функция Annotate в Cursor: визуальная разметка и точечный контекст для правок кода

Если ты собираешь фронтенд с помощью ИИ-редакторов кода, рутинное объяснение правок превращается в мучение. Ты запускаешь локальный сервер, видишь съехавший отступ у кнопки и идешь в чат к ассистенту. И тут начинается рутина: нужно нащупать через DevTools точный путь к файлу вроде src/components/Dashboard/MetricsCard.tsx, скопировать классы Tailwind и составить промпт: «Найди третью синюю кнопку во второй колонке и увеличь нижний отступ».

Модель смотрит на проект сквозь амбразуру текстовых файлов. Не видя рендеринга, она путает компоненты, лезет переписывать globals.css вместо локального блока или ломает соседнюю сетку. На формулирование промпта и откат неверных диффов уходит уйма времени.

Команда Cursor решила устранить этот разрыв. Обновление среды принесло инструмент Annotate, интегрированный в режим визуальной разработки Design Mode. Это интерактивный мост, связывающий графическое окно предпросмотра напрямую с контекстным движком Composer. Давай разберем, как устроена эта механика под капотом, какие сценарии она открывает и где кроются подводные камни.

Режим Design Mode: интерактивный мост между браузером и Composer

Активация режима происходит по горячей клавише Cmd + Shift + D в macOS или Ctrl + Shift + D в Windows и Linux. Встроенное окно предпросмотра превращается в интерактивный холст: Cursor внедряет легковесный оверлей, отслеживающий курсор и координаты элементов без нарушения выполнения клиентского JavaScript.

Разработчик больше не мечется между Chrome DevTools и редактором. Ты взаимодействуешь с живым интерфейсом непосредственно внутри IDE. Каждый визуальный жест транслируется не в координаты пикселей, а в структурированные метаданные.

Когда ты кликаешь по любому блоку на странице, система сопоставляет узел DOM-дерева с синтаксическим деревом проекта (AST). В контекст агента Composer автоматически передаются:

  • Точный путь к файлу компонента на диске;
  • Диапазон строк в исходном коде, где объявлен целевой JSX- или HTML-элемент;
  • Текущие вычисленные стили (computed styles) и классы утилитных библиотек;
  • Геометрические параметры контейнера (bounding box);
  • Стек родительских компонентов вплоть до корневого макета.

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

Шесть механик аннотирования: от клика до пакетных правок

Инструмент Annotate перекрывает весь спектр повседневных задач верстки через шесть базовых шаблонов взаимодействия:

  1. Точечный выбор (Point & Click). Ты кликаешь на карточку или кнопку и в появившемся поле ввода пишешь: «Сделай скругление как у карточки профиля и добавь тень при наведении». Агент мгновенно локализует компонент и формирует точечный патч.
  2. Прямоугольные области и разметка (Box & Draw Markup). Если проблема затрагивает композицию блоков, можно обвести рамкой нужную область экрана или нарисовать стрелку: «Выровняй эти три колонки по базовой линии и увеличь отступ до 24px».
  3. Прямое редактирование текста (In-Place Text Editing). Самый быстрый способ править микротексты и заголовки. Ты дважды кликаешь по тексту в окне предпросмотра и перепечатываешь формулировку. Агент сам определяет, зашит ли текст в JSX, вынесен в константу или привязан к ключу i18n, и обновляет нужный файл.
  4. Инспектор визуальных стилей (Style & CSS Inspector). Если не хочется подбирать слова для цвета или радиуса, инспектор позволяет покрутить ползунки отступов или выбрать цвет из палитры. Параметры компилируются в промпт в виде точных классов или числовых значений.
  5. Голосовые заметки (Voice Annotations). Можно кликнуть на элемент, зажать микрофон и надиктовать пожелания голосом. Голосовая модель переводит аудио в текст и связывает его с DOM-снапшотом.
  6. Пакетная отправка (Batch Edits). Разработчик может расставить 5–10 аннотаций по всей странице и нажать кнопку отправки. Composer анализирует все маркеры разом, строит общий план рефакторинга и применяет согласованный дифф за один проход.

Архитектурная анатомия: как связываются DOM и исходный код

Моментальная локализация кода опирается на строгую инженерную механику. Чтобы клик в браузере превратился в номер строки в файле .tsx или .vue, задействуются три уровня:

Сначала система опирается на карты соответствия кода — Source Maps. Сборщики (Vite, Next.js / Turbopack) в dev-режиме генерируют карты отображения бандла на исходники. Оверлей перехватывает клик и через sourcemaps декодирует путь к файлу.

Затем подключается интроспекция компонентных деревьев. В React инспектор читает служебные метаданные волоконного дерева (React Fiber Nodes), извлекая имена пользовательских компонентов и входные свойства (props). Это исключает частую проблему, когда модель пытается стилизовать внутренний тег чужой UI-библиотеки вроде Radix или Shadcn вместо компонента-обертки.

Наконец, данные фильтруются: в контекст Composer отправляется компактный JSON-манифест с иерархией тегов, классами, комментариями и графической вырезкой. О том, как важно изолировать агентные инструменты от лишнего информационного шума, мы рассказывали в материале про архитектуру официальных плагинов Cursor. Annotate воплощает ту же философию: передавать модели только минимально необходимый срез данных.

Скорость итерации и новые роли в команде

Цикл «заметил дефект — кликнул — агент исправил» сокращается в 3–5 раз, занимая около 15 секунд вместо нескольких минут ручного поиска. Но главное — размывается граница между версткой и дизайном. Дизайнер или продакт-менеджер теперь может открыть локальный предпросмотр, нащелкать замечания прямо по живым элементам и применить правки. Подобные сценарии отлично дополняют наше руководство по Cursor для автоматизации разработки.

Подводные камни и границы применимости

Несмотря на удобство, у Annotate есть важные технические ограничения:

  • Зависимость от dev-сборки: в минифицированном продакшен-бандле без карт sourcemaps инспектор видит лишь скомпилированные теги со случайными хэшами, лишая модель точной привязки.
  • Расход токенов: пакетная отправка 10–15 аннотаций со снимками экрана ощутимо раздувает входной промпт, поэтому эффективнее группировать задачи пачками по 3–5 штук.
  • Динамические состояния: элементы, активные только при наведении (hover) или во время модальных анимаций, требуют предварительной фиксации состояния перед кликом.
  • Ограничение веб-стеком: инструмент заточен под стандарты DOM/CSS и не поддерживает Canvas, WebGL или нативные низкоуровневые графические фреймворки.

Annotate наглядно подтверждает общий тренд: среда разработки превращается в пространственный интерфейс, где языковая модель видит приложение теми же глазами, что и человек.