Claude Code CLI: первые впечатления, ч.3

Я слышал, что люди используют Claude Code как автономного агента. Дают ему многошаговые инструкции и отпускают вольно ковыряться в коде на полчаса.

Я к этому пока не пришёл. Сложно отпустить контроль в принципе, а тем более — в нагруженной системе, где есть риск даунтайма и высоких затрат.

Поделюсь кейсом, над которым я работал вчера-сегодня.

Контекст

У нас есть endpoint, который для заданного id подкаста или эпизода вытаскивает из бэкенда URL картинки, предоставленной подкастером, и сжимаёт её в несколько раз. Также он генерит из квадратной обложки широкоформатное изображения для соц сетей.

Эти изображения кэшируются на Cloudflare и используются мобильными и веб приложениями.

Задачи

Мы запускаем поддержку приватных подкастов. Это работает так — на каком-нибудь Patreon или Substack пользователь оплачивает подписку на платный подкаст и ему выдаётся уникальный URL, который он может добавить в Metacast или другое приложение.

Нужно было сделать так, чтобы изображения приватных подкастов случайно не слились через наш сервис. Когда приватный подкаст открывают по ссылке мы будем показывать сильно заблюренное изображение с надписью private podcast посередине.

Заодно, пока я над этим работал, я решил добавить мониторинг сервиса в Sentry.

Таким образом, стояло две задачи.

Задача 1: Изображения

С манипуляцией изображений и сопутствующей логикой Claude Code справился лучше меня. Я не знаток библиотеки Sharp и CC сделал всё как надо с точки зрения фукнционала.

Но сделал он это с повторением кода и нечитаемо. Через 3-4 итерации всё было разложено по модулям, как надо.

Урок: Надо сразу прописывать детальные инструкции куда что идёт, если хочется сделать за раз.

Контр-поинт: Не уверен, что это будет быстрее, чем просто делать последовательные итерации вместе с ИИ.

Задача 2: Инструментация Sentry

У меня были большие ожидания. Я не хотел тратить много времени и был готов довериться Claude Code. А он наделал ошибок.

  1. Для начала, он использовал старую документацию. После того как я дал ему ссылку на новую, он всё исправил.

  2. Куча дублирующегося кода. Опять та же самая проблема. Удобно, что можно выделить строку и спросить "do we need this?" и почти всегда ответ "you're absolutely right! let's make it simpler..." или что-то вроде того.

  3. Код работал, но ивенты не появлялись в Sentry. Я безуспешно потратил около часа с Claude Code и в итоге лёг спать. Утром мне пришла в голову мысль, что мы же работаем в serverless в Vercel и, когда возникает исключение, функция прекращает исполнение и ивенты с исключениями не успевают отправиться на сервер (асинхронность Node.js, к которой я ещё привыкаю).

    Что ж. В этом-то и была загвоздка. Под очередное "you're right" Claude Code добавил await там, где было нужно, и всё заработало.

Урок: давать ИИ контекст про среду исполнения, хоть об этом можно было и догадаться по кодовой базе.