Projects в Claude Code — это функция, в которой Claude внутри одного диалога сам делит работу на треды и ведёт их параллельно в облаке. Как она устроена и кому доступна, я разобрал в статье Что такое Projects в Claude Code. Эта статья — продолжение: запись о том, как я поручил Projects собрать целый веб-сайт.

Я пробовал их с 26 по 28 сентября 2026 года, когда Projects были на стадии публичной беты (постепенно раскатывается на Pro и Max; официальная документация). Экраны и поведение ещё могут измениться. Здесь описано то, что реально происходило в те дни, а цифры сверены с экранами, отчётом о расходе и историей репозитория.

Сначала вывод: что я понял, попробовав

Замеры 26–28 сентября 2026 года (отчёт о расходе проекта и история репозитория)

Что сделано

11 PR

10 тредов, около 23 тыс. строк. Работа шла, даже пока я спал.

Сколько ушло времени

Около 20 часов

От создания до последнего слияния, из них около 7 часов ночью.

Израсходовано токенов

Около 190 млн

97,7% — чтение из кэша. На единицу работы примерно столько же, сколько у локального Claude Code.

Результат

Черновик на 80%

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

Если одной фразой: разработка на удивление хорошо идёт почти без присмотра, но на выходе получается черновик, а не готовый продукт, а выпуск на сервер, куда можно попасть только по SSH, упирается в стену. Дальше — и хорошее, и плохое, в том порядке, в каком всё происходило.

1. Что я поручил собрать: условия и честное признание в начале

Темой стал сайт-база данных, где можно узнать, сколько памяти нужно локальной LLM. Чтобы отвечать на вопрос «запустится ли эта модель на моём компьютере», он собирает с Hugging Face размеры квантованных файлов, считает требуемую память для каждой длины контекста и позволяет искать в обратную сторону — от объёма памяти вашей видеокарты или Mac. Проект не слишком маленький и естественно делится на части, которые можно вести параллельно (сбор данных, расчёт, страницы, обратный поиск, SEO), поэтому он хорошо подошёл как испытательный стенд для Projects.

ПунктУсловия в этот раз
Что строимБазу данных требований к памяти для локальных LLM (сайт на японском языке).
ТехнологииLaravel 13, PHP 8.5, MySQL 5.7. Размещение — общий хостинг, доступный только по SSH.
РепозиторийПриватный репозиторий на github.com. Треды проекта работают только с репозиториями на github.com, где установлено Claude GitHub App, поэтому я завёл новый аккаунт GitHub специально для Claude.
ТарифMax (20x).
МоделиТреды по умолчанию работали на Sonnet со средним effort; Opus координатор выбирал только для работы, где ошибка обошлась бы дорого, — ревью и расчётов. Сам координатор остался на значении по умолчанию: Opus с низким effort.

⚠️ Признаюсь сразу: в первой половине я связал ему руки

В первые инструкции проекта я вписал правила, которые требовали подтверждения человека на каждом шаге: «прежде чем начать тред, предложи его и дождись моего согласия», «одновременно не больше трёх тредов», «слияние в main одобряет человек». Задумывалось это как страховка, но на деле я сам выключил главное достоинство функции — то, что Claude сам раздаёт работу и ведёт её. По ходу я переписал инструкции так, чтобы доверить работу, и в разделе 4 сравниваю «до» и «после». Часть неудобств первой половины — следствие моих инструкций, а не самой функции.

2. Как начать и пять мест, где я споткнулся

Сама процедура короткая: на вкладке Code в десктопном приложении выбираете Projects → New, вводите название, цель и репозиторий и создаёте проект. Но до и после этого я споткнулся в пяти местах.

① Область доступа GitHub App

На экране разрешений по умолчанию выбрано «All repositories». Если аккаунт не выделенный, сузьте до «Only select repositories»: треды могут сами добавлять другие репозитории того же владельца.

② Срабатывает сразу при создании

В первом проекте Claude сам запускает тред, который читает репозиторий, в момент создания. Это происходит до того, как вы успеете вставить инструкции, поэтому предложенные треды у меня появились на английском.

③ По умолчанию стоит Opus

Модель тредов по умолчанию — Opus (на моём экране effort был средним; официальная документация пишет high). Лимит он расходует быстрее всех, поэтому сразу после создания зайдите в настройки → «General» и пересмотрите модель тредов.

④ Сетевой список разрешений

В стандартном списке разрешённых доменов нет ни Hugging Face, ни сайтов производителей. *.nvidia.com покрывает только поддомены, и для самого nvidia.com понадобилась отдельная строка.

⑤ Изменения не доходят до работающих тредов

Изменения среды и инструкций проекта действуют только для новых тредов (так прямо написано и в официальной документации). Застрявший тред я просил координатора продолжить в новом треде.

К пункту ②: сразу после создания в диалоге появилось сообщение «Up to $100 of initial usage, including the automatic setup, won't count towards your usage limits». Иначе говоря, первые $100 использования не засчитываются в обычные лимиты; на экране расхода это тоже отображалось как «project setup credit» (кредит на настройку проекта, примерно 24 часа до истечения). На 28 сентября об этом бонусе на странице Projects в официальной документации не сказано. Как именно он таял, показано в разделе 6.

В настройках среды я запутался, когда правил уже существующую среду. Если зайти через «Add cloud environment», откроется экран новой среды, и поначалу я вписал разрешённые домены в поле скрипта настройки. Существующую среду редактируют через значок шестерёнки, который появляется, если навести на неё курсор в списке (ровно так, как описано в официальной документации, но по одному экрану это трудно понять).

3. Около 20 часов по хронике: что происходило, пока я спал

Вот что происходило от создания (около 22:00 26 сентября) до слияния последнего PR (около 17:30 следующего дня, 27-го). Время указано по японскому времени (JST).

26-е, 22:10–23:50  Фундамент и ревью

Тред фундамента (Sonnet) сделал каркас Laravel, схему БД и документ с правилами и открыл PR. Когда я поручил ревью отдельному треду на Opus, тот поднял MySQL 5.7 в контейнере, проверил всё вживую и нашёл ошибку: служебный столбец с отметкой времени перезаписывался текущим временем при каждом обновлении строки (MySQL 5.7 навешивает автообновление на первый столбец TIMESTAMP, и в тестах на примерных данных это не проявляется). Тогда же появился набросок CI; я одобрил его и слил PR #1.

27-е, 0:00–7:30  Ночью три треда параллельно

Сбор данных (Opus), расчёт требуемой памяти (Opus) и SEO с общим макетом (Sonnet) шли одновременно, и к утру все три были в статусе «ожидает ревью». Больше всего меня впечатлило, что треды согласовывали работу друг с другом через координатора: тред расчёта спросил, как пользоваться макетом, а тред макета ответил. Проблему, которую нашёл тред расчёта, — для моделей, требующих принять условия использования, файл конфигурации не скачивается (401), — передали треду сбора данных, и он её решил.

27-е, 7:30–8:50  Разбор конфликтов

Треды параллельно правили один и тот же файл (определения маршрутов), поэтому после слияния первого PR следующий оказался в конфликте. В первый раз координатор сам заметил слияние и по своей инициативе велел разрешить конфликт. Во второй раз координатор ничего не сделал: на карточке треда появилась кнопка «Resolve conflicts» (разрешить конфликты), и разрешение началось после нажатия на неё. Реакция не всегда одинакова.

27-е, 8:50–11:30  Остановка на недоступном сайте

Тред, заносивший данные о видеокартах и Mac, не смог достучаться из облака до официальных сайтов производителей и не стал заполнять пробелы догадками, а остановился и показал карточку с тремя вариантами (расширить список разрешений / человек сам передаст значения / поискать на ПК человека). Я поправил список разрешений, попросил продолжить в новом треде, и он внёс 25 моделей с официальных страниц. По ходу тред сам заметил, что инструмент пересказа страниц выдумал несуществующее название продукта, и дальше перешёл на прямую проверку исходного HTML страниц.

27-е, 17:00–17:30  Доверил — и он поехал сам

Когда я переписал инструкции проекта так, чтобы доверить работу, координатор, хотя я ему ничего не писал, объявил: «Я прочитал новые указания о порядке работы. Дальше я сам решаю, что делать следующим, и веду работу», — и сам принял все решения: от слияния оставшихся PR до добавления новых данных о железе (два треда).

Скажу и об одном неудачном эпизоде. Строя основу для сбора данных, тред, чтобы разобраться, как у внешнего сервиса устроено ограничение частоты запросов, обратился к API Hugging Face 520 раз подряд. Тред ревью признал это «неоправданным» и оформил правила работы с внешними API, после чего следующий тред сбора данных за всю свою работу сделал всего 8 запросов. Если его не направлять, о нагрузке на внешние сервисы он сам не задумывается, так что это стоит прописать в инструкциях.

4. С подтверждением каждого шага и с полным доверием

Как я писал в разделе 1, первая половина шла по инструкциям с подтверждением человека на каждом шаге, а в 17:00 27-го я переписал их так, чтобы доверить работу. Поведение изменилось заметно.

СитуацияПервая половина: подтверждение на каждом шагеВторая половина: работа доверена
Запуск тредовВ первый раз он не соблюдал «предложи и жди» и сразу начал. Когда я отдельным сообщением повторил «не начинай, пока я не соглашусь», стал соблюдать.Координатор сам решал и запускал.
СлияниеКаждый раз кнопку на GitHub нажимал человек (7 раз).Треды сами сливали PR, прошедшие CI (4 раза).
Следующая задачаРешал и поручал человек.Координатор выбирал из TODO и запускал новый тред.
Участие человекаСлияния, кнопки конфликтов, настройка среды, пересылка сообщений — много переключений между экранами.Почти никакого (только когда нужна была настройка среды).

Когда доверяете работу, стоит помнить о двух вещах. Во-первых, переписанные инструкции не доходят до тредов, которые уже работают. Координатор сам объяснял: «Этот тред начался до того, как инструкции переписали, поэтому новых инструкций он не видит». Во-вторых, треды не смогли удалить старые правила, оставшиеся в памяти проекта. Попытку переписать старую заметку «сливает только человек» остановила проверка безопасности. Старые заметки человеку приходится удалять самому в настройках, в разделе «Memory».

Каркас инструкций, на котором я в итоге остановился, выглядит так.

Этот проект создаёт и сопровождает [ваш сайт].
Порядок работы на твоё усмотрение: какие треды запускать, сколько, на каких моделях и в каком порядке, решает координатор.
PR, прошедшие CI, можно сливать. Конфликты разрешай сам.

Спрашивать человека только о следующем:
- всё, что стоит денег (платные API, платные сервисы)
- когда нужны секреты (API-ключи, пароли)
- выкладка в продакшн и изменение боевых данных
- когда мнения расходятся и оба варианта разумны
- когда не удаётся добраться до нужного (не заполняй пробелы догадками или фиктивными данными)

Соблюдай ограничения частоты запросов внешних API и не обращайся к ним массово ради исследования.

Правда, с учётом того, что выяснилось потом, я советую добавить ещё пункт: «изменения настроек CI и скриптов выкладки одобряет человек». Треды, которым доверена работа, могут менять и настройки CI, а в сочетании с механизмом выкладки это открывает путь, по которому изменения попадают в продакшн без чьей-либо проверки (раздел 7).

5. Качество, которое вскрылось после запуска: все тесты проходили

Всё, что собрал проект, я передал своему обычному локальному Claude Code и выложил в продакшн. Первое впечатление сразу после запуска: «как-то обычно». Не было ни одной страницы модели. Когда я стал искать причину, обнаружилась дыра, характерная именно для параллельной разработки.

Дыра на стыке зон ответственности: никто не решал, «можно ли это публиковать»

Тред сбора данных

Написал в PR, что «решать, можно ли публиковать, — задача треда страниц», и проверку не сделал

Тред страниц

Сделал только сторону «не показывать то, что публиковать нельзя»

Итог

Флаг «можно публиковать» нигде не выставлялся, поэтому сколько данных ни загружай, на сайте оставалось 0 моделей

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

Когда я загрузил реальные данные, всплыли ещё две проблемы.

  • В таблицу квантований попали файлы, не относящиеся к основной модели. Вспомогательные модели для спекулятивного декодирования (MTP, EAGLE и т. п.) и файлы LoRA считались квантованиями основной модели, и таблица одной 12B-модели начиналась со строки «Q8_0 0.47GB» (настоящий Q8_0 весит 12,7 ГБ). После исправления 195 файлов в 56 репозиториях были переведены во вспомогательные.
  • Для новейших и самых востребованных моделей требуемая память показывалась как «невозможно рассчитать». Исходная формула не поддерживала архитектуры нового поколения (например, такие, где разные слои хранят память по-разному). Главное достоинство сайта не работало как раз на тех страницах, которые смотрят чаще всего.

Обе проблемы обнаружились только после загрузки данных в продакшн, потому что тесты строились исключительно на примерных данных. Вот что я исправил с помощью локального Claude Code и сколько это заняло (28 сентября, с 17:21 до 22:54, 13 коммитов).

Что исправленоКак обнаружено
Не было страницы политики конфиденциальности (обязательна до показа рекламы)Ревью со стороны роли администратора сервера
Полностью отсутствовала проверка публикации (привязка моделей к семействам)0 моделей в продакшне
В продакшне sitemap.xml отдавал ошибку (500), письма с уведомлениями об ошибках не отправлялисьПроверка в продакшне
Форма обратной связи падала с ошибкой (500) на вводе в другой кодировкеПроверка в продакшне
Примесь файлов вспомогательных моделей; требуемая память для новых архитектурПросмотр страниц с реальными данными глазами

При этом были и явные плюсы. Страницы открывались быстро (основные — около 0,1 секунды), размеры файлов соответствовали реальным значениям на Hugging Face, а требуемая память для поддерживаемых моделей совпадала с расчётом по формуле. SEO-проработка — заголовки, структурированные данные, sitemap, llms.txt — была заложена с самого начала. Общий вывод такой: каркас и детали сделаны хорошо, а не хватало «швов» между частями и реальных данных.

6. Расход и стоимость: из чего сложились 191,8 млн токенов

Экран Usage в настройках проекта показывает токены по тредам и по моделям. Кнопкой в правом верхнем углу всё это можно скопировать как текст. Отчёт на 11:47 27 сентября выглядел так.

ПунктЗначение
Тредов10
Всего токенов191,8 млн (ввод 317 тыс. / вывод 574 тыс. / чтение из кэша 187,4 млн / запись в кэш 3,5 млн)
Доля попаданий в кэш98%
Изменения кода+23 531 строка / −302 строки (8 тредов, открывших PR)
Координатор3,3 млн (2% от общего объёма)
Самый затратный тредSEO и общий макет (Sonnet): 50,5 млн (26%)

190 млн звучит внушительно, но 97,7% из них — чтение из кэша. Тред при каждом действии заново читает весь предыдущий диалог, и когда один тред совершает сотни действий, получается именно такая картина. Надбавка координатора — всего 2%, так что накладные расходы на управление оказались невелики.

Для сравнения я посчитал отношение «прочитанные токены ÷ выведенные токены» и сопоставил его с локальным Claude Code (последние три дня на моём ПК): у проекта около 330, локально около 340. Расход на единицу работы почти такой же, как у локальной сессии. Projects кажутся тяжелее, видимо, потому, что всё идёт параллельно и разом, и лимит тает за короткое время (содержание работы разное, так что сравнение ориентировочное).

Что касается денег, мне удалось проследить, как таял кредит на настройку ($100).

Использование кредита на настройку проекта ($100)

Сразу после создания (автоматический запуск)1%
После фундамента6%
После трёх ночных тредов32%
После пяти параллельных задач78%
Дополнительная работа после передачиИсчерпан (100%)

Источник: показатели расхода в десктопном приложении (26–27 сентября 2026 года). За это время недельный лимит Max не увеличился.

Этот кредит вёл себя примерно как сумма, посчитанная по ценам API. Если пересчитать отчёт на 11:47 по официальным ценам Anthropic (Pricing: Sonnet 5 — ввод $2, вывод $10, чтение из кэша $0.20; Opus 5.5 — ввод $4, вывод $20, чтение из кэша $0.20; всё за миллион токенов), выходит около $58–65, что в целом сходится с показанием на тот момент (78% = $78). То есть «$100» означает объём, за который через API пришлось бы заплатить $100, а по меркам фиксированного тарифа Max это не так уж много. Кстати, отдельно выданный кредит на облачные сессии (для Max — $250) на экране получения был помечен «Projects не входят», и действительно с него не списалось ни доллара.

7. Почему застрял выпуск в продакшн

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

  • Облачные треды не могут достучаться до продакшн-сервера (SSH-ключ есть только на моём локальном ПК).
  • Чтобы работать на локальном ПК, нужен режим проекта «Work locally» (работа локально). Под капотом это Remote Control, и в десктопном приложении нужно включить «Use this computer from your phone and claude.ai» (использовать этот компьютер с телефона и из claude.ai).
  • Однако эта настройка действует на список всех папок, которые вы до сих пор открывали в Claude Code, и собирается он автоматически. У меня их было 22, и одна из них — родительская папка с несколькими десятками проектов внутри. Пока настройка включена, во всех них можно удалённо запускать работу, а названия папок, пути и URL репозиториев ещё и отправляются в Anthropic. Чтобы ограничиться одной папкой, придётся идти другим путём: открыть терминал в этой папке и запустить claude remote-control.

Поэтому я рассмотрел несколько способов выкладки.

СпособКак работаетОценка
Work locally (Remote Control)Тред, работающий на локальном ПК, выкладывает по SSHРасширяется круг доступных папок. Каждый раз включать и выключать — хлопотно.
Раннер, постоянно работающий на ПК (self-hosted GitHub Actions)При обновлении main выкладка запускается на локальном ПКЕсли треды могут править и сливать workflow, это становится входом для запуска произвольного кода на локальном ПК. Отклонено.
Уведомлять сервер через webhookСервер получает уведомление от GitHub и забирает измененияПришлось бы открыть новый URL, доступный извне. Отложено после ревью со стороны роли администратора сервера.
Сервер сам периодически забирает измененияcron на сервере проверяет GitHub, скачивает по ключу только для чтения и применяетВхода извне не появляется, это безопасно. Но к тому моменту я уже решил перенести всё в свой обычный локальный процесс.

В итоге я заархивировал проект, а сделанное перенёс в свой обычный процесс с локальным Claude Code. Я решил, что поставить сайт на тот же конвейер выкладки, что и остальные мои сайты, безопаснее, чем заводить новый механизм.

Оглядываясь назад, думаю, что Projects лучше изначально рассматривать в паре с хостингом, который выкладывает автоматически после слияния на GitHub. Например, у Vercel достаточно подключить GitHub, и изменения сами дойдут до продакшна, так что такого тупика, как у меня, не возникнет. Правда, бесплатный тариф Hobby у Vercel только для некоммерческого использования, а для рекламы вроде Google AdSense нужен платный Pro (от $20 в месяц) (Fair Use Guidelines). К тому же он плохо сочетается с сайтами на PHP и MySQL вроде моего. Технологии и место размещения важно выбирать вместе и с самого начала.

Риски удалённого управления собственным ПК и то, чем это отличается от обычного Claude Code, я собираюсь подробно разобрать в отдельной статье. Как управлять локальной сессией со смартфона, рассказано в статье о Remote Control.

8. Для каких задач подходит, а для каких нет

Подходит

  • Что-то новое, что делится на независимые части
  • Работа, которую хочется продвинуть, пока вы спите или в отъезде
  • Есть хостинг, который выкладывает автоматически через интеграцию с GitHub
  • Можно заранее письменно определить, что именно доверить

Не подходит

  • Серверы, для выкладки на которые нужен SSH с ключом на вашей машине
  • Существующая работа, сильно завязанная на локальные инструменты проверки или собственные процедуры
  • Репозитории, размещённые не на GitHub
  • Небольшие задачи на одну сессию (хватит облачной сессии)

По итогам этого опыта вот что я бы проверил перед стартом.

  • Хостинг: выкладывается ли сайт автоматически после слияния на GitHub. Если нужен SSH, заранее решите, например, чтобы сервер сам забирал изменения.
  • Права на GitHub: область установки Claude GitHub App. Заведите отдельный аккаунт или сузьте список репозиториев.
  • Что доверить: в инструкциях проекта перечислите только то, о чём нужно спрашивать человека. Изменения настроек CI и выкладки сделайте требующими одобрения.
  • Сеть: если используете внешние API или сайты, внесите в список разрешений и сам домен, и его поддомены.
  • Проверка на реальных данных: не успокаивайтесь, если прошли тесты на примерных данных. В конце запустите отдельный тред, задача которого — прогнать данные, как в продакшне, от начала до конца и посмотреть на результат.
  • Лимиты: пересмотрите модель тредов по умолчанию. Первые 24 часа действует кредит на настройку на $100.

Итоги

Projects действительно снимают с человека работу по раздаче задач, отслеживанию и повторному объяснению одного и того же контекста. За ночь параллельно продвинулись три задачи, треды согласовывали работу между собой, а когда я доверил им работу, они сами решали и про слияния, и про следующие задачи. Расход токенов на единицу работы тоже не отличался от локального Claude Code.

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

FAQ

Q. Сколько стоят Projects?

A. Отдельной платы нет: расходуются обычные лимиты Pro или Max. В этот раз сверх того был «кредит на настройку», по которому до $100 использования в первые примерно 24 часа не засчитывались в лимиты (так показывал экран; в официальной документации на 28 сентября об этом не сказано). Работа из 10 тредов и 11 PR израсходовала около 190 млн токенов и исчерпала этот кредит. По ценам API это примерно $100.

Q. Работа правда продолжается, если закрыть ноутбук?

A. Да. Треды, работающие в облаке, продолжали работу, и когда я закрывал ПК, и когда отправлял его в сон. В этот раз за примерно 7 ночных часов завершились три задачи. Но треды, запущенные на вашем ПК через «Work locally», работают только пока ПК не спит.

Q. Можно ли использовать репозитории не на GitHub?

A. Треды, работающие с кодом, рассчитаны на репозиторий на github.com с установленным Claude GitHub App. Я вёл этот проект на собственном git-сервере, поэтому завёл отдельный аккаунт GitHub для Claude, начал там, а в конце вернул всё к себе.

Q. Что будет, если поменять инструкции проекта по ходу работы?

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

Q. Безопасен ли режим «Work locally»?

A. Связь идёт только по зашифрованному исходящему соединению с вашего ПК, входящих портов он не открывает. Однако если включить настройку в десктопном приложении, удалённо запускать работу станет можно во всех папках из списка, собранного по истории использования (у меня 22, включая несколько десятков проектов внутри родительской папки). Нужны такие меры, как включать настройку только на время работы и проверить, что у аккаунта, через который вы входите, включена двухфакторная аутентификация.

Q. Можно ли использовать сделанное как есть?

A. В моём случае — нет. Каркас и SEO-проработка были сделаны хорошо, но логика на стыках зон ответственности отсутствовала полностью, и были ошибки, проявлявшиеся только на реальных данных. Перед запуском нужен этап, на котором вы загружаете реальные данные и проверяете всё целиком от начала до конца.