Пять привычек, пять команд
Каждый список привычек для Claude Code говорит, что делать. Этот превращает каждую привычку в команду, которую запускает сам Claude Code, так что привычка работает независимо от того, прочитала ли её модель. Мы прогнали все пять на реальном репозитории, ledgerly: небольшом API для выставления счетов на Node 20 и TypeScript, с Claude Code 2.1.294.
Причина описана в собственных рекомендациях Anthropic: строка вроде "Always typecheck before you finish" в вашем CLAUDE.md "срабатывает в большинстве случаев, но не всегда". Пять команд ниже: /goal, хук PreToolUse, /context вместе с /clear, /skill-doctor и субагент-ревьюер только для чтения.
Почему записанная привычка не срабатывает
CLAUDE.md это файл инструкций, который Claude читает в начале каждой сессии, что-то вроде readme для нового коллеги: команды, соглашения и правила. Именно туда попадает большинство привычек, причём самые важные часто набраны капсом, например "NEVER edit src/store/migrations.ts".
В документации Anthropic по памяти прямо сказано, чем является этот файл: Claude читает его как контекст, а не как принудительную конфигурацию. Каждая строка это совет, который взвешивается на фоне текущей задачи. Разница такая же, как между чек-листом код-ревью на странице вики и проверкой в вашем CI: первая работает, только если кто-то её прочитал, вторая запускается всегда.
Что сделать: откройте свой CLAUDE.md и отметьте каждую строку, которая должна выполняться каждый раз без исключений. Остальное оставьте на месте, ведь файл по-прежнему подходит для того, что Claude не может вывести из вашего кода, а в документации рекомендуется держать файл короче 200 строк.
Привычка первая: скажите, как выглядит «готово»
Claude останавливается, когда работа выглядит законченной. Если ничего не говорит ему, закончена ли она на самом деле, отмечают рекомендации Anthropic, тестовым набором становитесь вы.
/goal задаёт финишную черту один раз. После каждого хода небольшая быстрая модель читает диалог и возвращает один из ответов: выполнено, ещё не выполнено или невозможно. Она не умеет запускать команды и читать файлы, поэтому формулируйте условие так, чтобы его мог подтвердить собственный вывод Claude, например полный вывод тестов.
| Запуск на ledgerly | Что мы увидели |
|---|---|
| Обычная сессия, тот же запрос на фичу | Тесты шли внутри свёрнутого вызова инструмента; в ответе было "pnpm test passes (37/37)" |
С /goal и условием "full pnpm test output printed" |
Ответ вывел весь прогон, "Tests 44 passed (44)", затем "Goal achieved (45s · 1 turn · 5.1k tokens)" |
Введите /goal без аргументов, чтобы увидеть статус, и /goal clear, чтобы снять цель. Для правки в одну строку она не нужна; в документации сказано, что больше всего она важна на длинных прогонах, где Claude иногда завершает ход, оставив пункты незакрытыми.
Привычка вторая: правило, которое нельзя нарушить
Правило, набранное капсом, соблюдается в большинстве случаев, и в этом как раз проблема. Хук это небольшой скрипт, который Claude Code сам запускает в заданный момент; хук PreToolUse срабатывает перед каждым вызовом инструмента. Наш читает путь к файлу и, если это src/store/migrations.ts, печатает "migrations.ts is append-only: add a new migration file instead" и завершается с кодом 2. В руководстве по хукам сказано, что код 2 блокирует вызов и возвращает сообщение Claude, причём блокировка действует даже при отключённых запросах разрешений.
В наших прогонах: когда правило стояло в CLAUDE.md, Claude сам отказался от правки. Когда правило убрали, Claude дважды полез в файл миграций, и хук заблокировал обе правки; Claude изменил остальное и сообщил: "A project hook blocked both of my edits to that file." В двух последующих прогонах он сначала прочитал скрипт хука и больше не трогал этот файл.
Хук блокирует только то, что может распознать: путь или команду. Правила, требующие суждения, вроде "пиши чистый код", остаются в CLAUDE.md, а узкое условие срабатывания не даёт хуку мешать вашей собственной работе.
Привычка третья: одна задача, один контекст
Контекст это всё, что модель видит на каждом ходу: ваши инструкции, прочитанные файлы и весь диалог. /context показывает его в виде сетки; /clear очищает диалог, а файлы и настройки остаются.
/context на ledgerly |
Всего | Сообщения |
|---|---|---|
| После завершённой задачи | 57.5k из 1m токенов | 26.4k токенов |
После /clear |
31.1k из 1m токенов | 130 токенов |
Из документации: /clear между несвязанными задачами ничего не стоит, а после двух неудачных исправлений нужно очистить контекст и написать промпт получше. В середине задачи вместо этого используйте /compact с указанием фокуса.
Привычка четвёртая: загружайте только то, чем пользуетесь
Навык (skill) это упакованная инструкция, которую Claude загружает, когда задача ей соответствует. Целиком навык загружается только при запуске, но его однострочное описание в списке попадает в промпт на каждом ходу, а бюджет списка составляет около 1% окна контекста, поэтому описания наименее используемых навыков отбрасываются первыми.
/skill-doctor перечисляет все навыки с их стоимостью в контексте и тем, как часто вы ими пользовались. На нашей машине он показал:
| Вид | Загружено, но ни разу не вызвано |
|---|---|
| Личные навыки | 13 |
| Синхронизированные из claude.ai | 14 |
| Навыки плагинов | 25 |
Он также перечислил 4 плагина, которыми давно не пользовались. Отключайте навык в /skills; синхронизированные навыки возвращаются, если их удалить, поэтому отключайте их на claude.ai; навыки плагинов настраиваются через менеджер плагинов. Одна строка списка невелика, так что это убирает шум, а не освобождает половину контекста.
Привычка пятая: свежий взгляд на diff
Субагент это вторая сессия Claude, запущенная для одной задачи, с собственным пустым контекстом, которая возвращает краткую сводку. Документация Anthropic говорит прямо: передача той же задачи субагенту не улучшает ответ, но свежий ревьюер полезен, потому что не видел ваших рассуждений.
Наш ревьюер лежит в .claude/agents/reviewer.md и имеет инструменты только для чтения: Read, Grep, Glob, Bash(git diff:*) и Bash(git status:*). На diff с просроченными счетами собственное ревью сессии-автора нашло настоящий баг: счета с одинаковой датой оплаты сортировались по id как по тексту. Ревьюер нашёл тот же баг и отсутствующий тест за 28 секунд, а затем один за другим проверил все соглашения из README. Он также заявил, что проверка типов прошла чисто, хотя его инструменты не могли её запустить, и основная сессия пометила это как непроверенное. Вызывайте его один раз на фичу, перед слиянием.
С какой привычки начать
Начните с хука, на правиле, которое в вашем репозитории уже нарушали не раз. /clear и /skill-doctor ничего не стоят. /goal оставьте для длинных прогонов, а ревьюера для слияния. Правило, которое стоит запомнить: если привычка должна выполняться каждый раз, сделайте её тем, что Claude Code запускает, а не тем, что Claude читает.
AIDive