Перейти к содержимому
AUTHORВЫПУСК №008 → АВТОМАТИЗАЦИЯ АГЕНТАМИ: 90% НЕ ПРОМПТ / имейте совесть, когда будете делиться или копировать
>AISTUDY_
FOLDER SERIES / 001 / ISSUE / 002
· · ·  AUTHOR COLUMN  · · ·
SHEET 01 / 14 / SCALE 1:1 / RU · 2026

SELECT ТЕКСТ ДЛЯ:

Эта публикация существует в двух полных версиях. Выберите, как читать. Решение можно поменять в любой момент: кнопки остаются доступны сверху страницы.

N°001 REV·02 PAPER·A3 DRAWN·BY·AUTHOR

001ПАПКА ПРОЕКТА ДЛЯ АГЕНТА

Документы. Скиллы. Хуки. Правила. Четыре ящика, в которых лежит всё, что нужно агенту, чтобы перестать каждый раз начинать с нуля и начать работать как мастер в своей мастерской.

СЕРИЯFOLDER 001
ВЫПУСК002 / 06.05.26
ОБЪЁМ≈ 4 800 СЛОВ
УРОВЕНЬСРЕДНИЙ
01
BLOCK 01 / ОПИСАНИЕ Метафора, ящики, эффект Зачем агенту нужна папка проекта и что в неё кладут

МЕТАФОРА. ШКАФ С ЯЩИКАМИ

Представь свой шкаф дома. Если каждая вещь лежит на своём месте, утром ты находишь что нужно за минуту. Если всё свалено в кучу, каждое утро превращается в раскопки.

У AI-агента (это любой инструмент, который ходит в проект и пишет код от твоего имени — Claude Code, Codex, Cursor, Gemini CLI) ровно та же история. Агенту нужен шкаф, в котором лежат все инструкции по твоему проекту. Ящик с описанием проекта. Ящик с защитой от опасных действий. Ящик с готовыми навыками. Ящик с правилами поведения.

Эта статья показывает, какие ящики нужны и как их сделать. Технику ты не пишешь руками. Ты говоришь агенту фразу из публикации, агент сам создаёт у тебя в проекте все нужные файлы.

И ещё одна важная вещь до того, как нырнём в детали. Подход с такой папкой работает не только в Claude Code. Все взрослые агенты (и Claude, и Codex, и Cursor, и Gemini, и Grok) читают инструкции в одинаковой логике: сначала общие настройки на твоём компьютере, потом папка с инструкциями текущего проекта, в самом конце сама задача. Что ближе к делу, то и побеждает. Имена файлов разные, логика одна. Поэтому всё, что ты прочитаешь дальше, переносится между инструментами почти один в один, меняется только название файла.

УНИВЕРСАЛЬНЫЙ ПРИНЦИП / ОБЩЕЕ → ПРОЕКТНОЕ → ЗАДАЧНОЕ

Любой агент собирает контекст по одной лестнице. Сначала твои общие настройки (один раз на всю систему), потом инструкции этого проекта, потом твоя задача. Ближайшее к делу побеждает спорные моменты. Если поймёшь эту лестницу один раз, дальше работа с любым агентом идёт по одному и тому же алгоритму.

УТОЧНЕНИЕ МЕТАФОРЫ / ОДИН БОЛЬШОЙ ШКАФ + МИНИ-ЯЩИКИ В КАЖДОМ ПРОЕКТЕ

Когда мы говорим «папка проекта для агента», точнее это так: у тебя есть один большой общий шкаф (стоит на твоём компьютере, в папке-настройках агента, не привязан ни к какому проекту) и в каждом проекте — свой мини-ящик. Базовая защита, общий стиль работы, универсальные правила поведения — лежат в большом шкафу, ставятся раз и работают всегда. В мини-ящике каждого проекта — только специфика этого проекта: карта папок, команды для запуска, проектные правила (например, «не правь схему напрямую»). Когда читаешь «положи Х в шкаф» — у каждого ящика будет указано, в общий или в проектный.

Четыре ящика, по порядку важности:

  • Документы — ящик с описанием проекта. Тут лежит карта: что где находится, какие команды для запуска, чего нельзя ломать.
  • Скиллы — ящик с готовыми навыками (английский термин — skills). Типовые процедуры, которые агент сам подхватывает, когда видит знакомую задачу.
  • Хуки — ящик с защитой (английский термин — hooks; «крючки», за которые цепляются маленькие программки-сторожа). Останавливают агента до того, как он сделает что-то непоправимое.
  • Правила — ящик с правилами поведения. Как агент должен общаться, когда обязан проверять факты, что считать незавершённой работой.
ГЛАВНОЕ / ИНФРАСТРУКТУРА ВАЖНЕЕ МОДЕЛИ

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

КАК ЭТО РАБОТАЕТ. ПОРЯДОК ЧТЕНИЯ

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

На практике это значит: один раз настраиваешь свой стиль работы с агентом («пиши коротко», «не выдумывай числа»), и дальше во всех проектах эти правила работают автоматически. В каждом проекте дополняешь только то, что отличается.

ЭФФЕКТ. БЫЛО И СТАЛО

Каждый раз начинаешь с одного и того же. Объясняешь агенту, что за проект, где деплой, какие команды нельзя выполнять. Один раз агент молча стирает твою ветку с несохранёнными изменениями. Восстановление занимает час. Этот час никогда не вернётся.

Открываешь беседу с агентом, говоришь задачу одной фразой. Агент сам подтягивает описание проекта, помнит правила, опасные команды просто не выполняются (защита их останавливает до выполнения). Цикл «попросил, получил готовое» сжимается с часов до десятков минут.

С ЧЕГО НАЧАТЬ / НЕ ВСЁ СРАЗУ

Не пытайся построить все четыре ящика за один вечер. Сначала общие настройки (один раз на всю систему), потом два маленьких файла-описания твоего проекта, потом базовая защита от опасных команд (стартовый набор готов в Блоке 5: rm -rf на системные пути, force-push, drop баз — это уже известные классы катастроф, их ставишь сразу, не дожидаясь, пока агент попробует). Готовые навыки и правила добавляешь позже, по реальным повторам в твоей работе. Шкаф растёт вместе с проектом, но базовая защита стоит с первого дня.

ЛЕГЕНДА БЛОКОВ

i
INFOГлавные тезисы. Объяснение «что и почему».
!
WARNINGКогда не сработает. На что обратить внимание.
TIPПодсказка по практике. Маленький лайфхак.
×
DANGERТо, что точно сломает прод, если повторить.

МЕТАФОРА. «ПАПКА ПРОЕКТА ДЛЯ АГЕНТА»

У мастера в мастерской есть папка проекта. В одном ящике — чертежи. В другом — типовые операции. В третьем — защитные инструменты с автоматикой. В четвёртом — правила цеха: что нельзя делать никогда, что делать в спорных случаях.

Когда я запускаю Claude Code в репозитории, у агента должна быть такая же папка. Конкретно — в репозитории лежит каталог .claude/ плюс пара корневых markdown-файлов. Агент перечитывает их в начале каждой сессии и из «универсального генератора кода» превращается в исполнителя, который знает этот конкретный проект.

Подход не привязан к одному инструменту. Иерархия глобальное → проектное → задачное одинакова у Claude Code, Codex CLI, Cursor, Gemini CLI, Grok. Меняются имена файлов: Claude Code читает AGENTS.md и CLAUDE.md, Codex CLI — тоже AGENTS.md, Cursor — директорию .cursor/rules/, Gemini CLI — GEMINI.md. Логика чтения и приоритетов одна и та же: ближайший в дереве файл побеждает, проектный перебивает глобальный. Всё дальнейшее в этой публикации — Claude-специфика по синтаксису, но переносится на любой из перечисленных инструментов с заменой имени файла.

УНИВЕРСАЛЬНЫЙ ПАТТЕРН / GLOBAL → PROJECT → TASK

Все основные coding-агенты идут по одной лестнице чтения: сначала глобальные настройки в домашней директории пользователя, потом проектные файлы в репозитории, потом сам промпт. Конфликты разрешаются в пользу ближайшего к задаче. Один раз строишь иерархию для Claude Code, дальше переносишь её на Codex или Cursor одной правкой имён файлов.

МЕТАФОРА УТОЧНЕНА / GLOBAL DRAWER + PER-PROJECT DRAWER

«Папка проекта для агента» — рабочий ярлык. Точнее: у тебя есть один глобальный шкаф (~/.claude/, не привязан к проекту) и в каждом проекте свой мини-набор (<project>/.claude/). Базовый guard-bash, общий стиль агента, универсальные поведенческие правила — лежат в глобальном ~/.claude/. В проектном .claude/ — только специфика этого репо: deploy-проверки, схема-инварианты, проектные subagents, скиллы стека. Когда в публикации написано «положи в .claude/X» — рядом будет указано, глобально или проектно.

Подход разложился на четыре слоя. У каждого свой ящик в папке.

  • Документы — ящик с чертежами. AGENTS.md и CLAUDE.md в корне репозитория. Структура проекта, команды, инварианты, гочи (gotchas — грабли, на которые уже наступали).
  • Скиллы — ящик с типовыми операциями. Переиспользуемые процедуры, которые агент сам подключает по семантике запроса.
  • Хуки — ящик с защитой (hook — «крючок»). Shell-скрипты, которые Claude Code запускает на событиях сессии: блокируют деструктив, добавляют контекст, ловят ленивые ответы.
  • Правила — ящик с внутренним уставом. Инварианты поведения, которые подгружаются только в подходящий момент (прогрессивное раскрытие).
ГЛАВНОЕ / ИНФРАСТРУКТУРА > МОДЕЛЬ

Какая бы крутая ни была модель, без папки она каждый раз начинает с нуля. С папкой даже более простая модель работает аккуратно и предсказуемо: помнит структуру кода, не запускает деструктив, не теряет контекст между сессиями.

СВЯЗУЮЩИЙ МЕХАНИЗМ. READ ORDER

Все четыре ящика связывает один принцип. Read order, иерархия чтения при старте сессии. Глобальные правила в ~/.claude/ ставятся один раз и переиспользуются. Проектные в <project>/.claude/ перебивают глобальные. При конфликте побеждает ближайший в дереве файл.

Это даёт «костяк один на все проекты» плюс «специфика на каждый». Один раз настроил общий стиль работы агента, дальше в каждом сервисе только дописываешь, что отличается.

ЭФФЕКТ ВНЕДРЕНИЯ

Агент в каждой новой сессии начинает с пустоты. Я повторяю объяснения по десять раз в день: какой стек, где деплой, какие команды деструктивны. Один раз агент молча выполняет git reset --hard на ветке с несохранёнными изменениями. Восстановление, час работы.

Агент при старте сессии уже видит структуру проекта, правила работы, защитные хуки. Я отдаю задачу одной фразой, агент сам подтягивает контекст и идёт работать. Деструктивные команды блокируются до выполнения. Цикл «задача готова» сжимается с часов до десятков минут.

С ЧЕГО НАЧАТЬ / НЕ ВСЁ СРАЗУ

Не пытаться построить все четыре слоя сразу. Сначала глобальный костяк (один раз на всю систему — общий стиль работы, базовая защита), потом два корневых документа в проекте, потом расширение защиты под специфику этого проекта, потом скиллы и правила по реальным повторам.

Важно про хуки. «Стартовый набор» (rm -rf, push --force, drop database, остановка nginx/postgres) ставится сразу — это известные классы катастроф, ждать инцидента в своём проекте незачем. По реальным случаям добавляются только специфичные для проекта классы (запрет деплоя из dev-ветки, защита кастомных конфигов и т. п.).

ЛЕГЕНДА БЛОКОВ

i
INFOГлавные тезисы. Объяснение «что и почему».
!
WARNINGКогда не сработает. На что обратить внимание.
TIPПодсказка по практике. Маленький лайфхак.
×
DANGERТо, что точно сломает прод, если повторить.
02
BLOCK 02 / МЕНЕДЖЕРАМ Что это, сколько, когда срочно Без жаргона. Четыре параграфа.

ЧТО ЭТО

Шкаф с инструкциями для AI-агента, который лежит прямо в папке твоего проекта. Агент перечитывает его каждый раз, когда команда открывает беседу. Внутри: описание проекта, готовые навыки, защита от опасных команд, правила поведения.

СКОЛЬКО ВРЕМЕНИ ЗАЙМЁТ ПОСТАВИТЬ

Зависит от того, есть ли уже в команде эталонный проект, у которого всё собрано. Если эталона нет (первый раз делаем с нуля) — около рабочего дня активной работы: агент изучает проект, согласует структуру, заполняет файлы, ты подтверждаешь, запускаешь упражнения. Если эталон есть (копируем структуру и подменяем специфику) — около часа. Со второго-третьего проекта по эталону — 15-20 минут. Полноценный шкаф со всеми защитами и навыками растёт месяц-два по мере появления реальных потребностей. Но базовый эффект (агент видит проект, не повторяешь объяснения каждый раз) появляется в первый же день.

ЧТО МЕНЯЕТСЯ В РАБОТЕ КОМАНДЫ

Перестают повторяться объяснения. Один человек настроил шкаф, остальные открывают агента в этом проекте и сразу получают тот же контекст и те же правила. Защита ловит классические ошибки до того, как агент успевает что-то сломать: опасная команда блокируется, попытка отредактировать секретный файл невозможна.

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

КОГДА СРОЧНО СТАВИТЬ

Если хотя бы один человек в команде каждый день работает с агентом, шкаф окупится за неделю. Если работаете на проде, где цена ошибки исчисляется в инцидентах, — это «прямо сейчас», а не «когда будет время». Один случай, когда агент случайно ломает важный файл, обычно стоит больше, чем два часа на настройку шкафа.

ЦИФРА / СКОЛЬКО АКТИВНОЙ РАБОТЫ

Первый шкаф с нуля (нет эталона, всё впервые) — около рабочего дня. Первый шкаф в новом проекте по уже готовому эталону — около часа. Со второго-третьего проекта по эталону — 15-20 минут. Поэтому первый раз вкладываешься в полный стандарт, дальше тиражируешь.

WARNING / КОГДА ШКАФ НЕ СРАБОТАЕТ

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

ЧТО ЭТО

Папка с инструкциями для AI-агента, лежащая прямо в репозитории. Агент перечитывает её каждый раз, когда команда запускает сессию. Внутри: описание проекта, типовые процедуры, защита от деструктивных команд, поведенческие правила.

СКОЛЬКО СТОИТ ПОСТАВИТЬ

Зависит от наличия проекта-донора со стандартом. Без донора (первый раз с нуля) — около рабочего дня: разведка по структуре проекта, согласование, заполнение, проверка упражнениями. С донором (копируем структуру, переписываем специфику) — около часа. Со второго-третьего проекта по донору — 15-20 минут. Полноценная зрелая папка с защитой, скиллами и регламентом работы (workflow) растёт месяц-два по мере появления реальных потребностей. Но базовый эффект (агент видит контекст, не повторяешь объяснения) появляется в первый день.

ЧТО МЕНЯЕТСЯ В РАБОТЕ КОМАНДЫ

Перестают повторяться объяснения. Один инженер настроил папку, остальные открывают агент в этом проекте и сразу получают тот же контекст. Защитные слои ловят классические ошибки до инцидента: деструктивная команда блокируется, деплой из не той ветки запрещён, правка секретного файла невозможна стандартными инструментами.

КОГДА СРОЧНО СТАВИТЬ

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

ЦИФРА / ВРЕМЯ ПЕРВОЙ УСТАНОВКИ

Первая установка (англ. bootstrap — «зашнуровать», то есть запустить с нуля) нового проекта по эталону — около часа активной работы. Без эталона — рабочий день. Со второго-третьего проекта по эталону — 15-20 минут. Поэтому первый раз делается полный стандарт, дальше тиражируется.

WARNING / КОГДА НЕ СРАБОТАЕТ

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

03
BLOCK 03 / ШАГИ Дорожная карта в 7 шагов Тимлидский гид. Без кода, в логике.

Шаги ниже — это порядок, в котором собирается шкаф. Каждый шаг ты не делаешь руками. Ты говоришь агенту фразу, агент сам всё создаёт у тебя в проекте. Готовые промпты — в Блоке 05, тут пока обзорная карта.

НЕ СРАЗУ ВСЁ / ШКАФ РАСТЁТ

Не пытайся за один вечер заполнить все четыре ящика. Шкаф — это живое рабочее пространство, оно растёт вместе с твоим проектом. Старт с минимума, потом докладываешь новые карточки по мере появления реальных потребностей.

1

Поставить общие настройки на свой компьютер

Это делается один раз и работает дальше во всех проектах. Сюда уходят универсальные вещи: общий стиль работы агента (отвечай по-русски, без воды, не выдумывай числа), правила коммуникации, запрет на опасные команды. Один раз настроил, переиспользуется всегда. Это «как мы работаем вообще», независимо от проекта.

2

Завести проект-эталон со всем готовым

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

3

Документы — перед специфичной автоматикой

В каждом новом проекте сначала появляются два маленьких файла-описания: что за проект, какие команды для запуска, какие правила. Эти два файла создают «каркас понимания».

Тут есть тонкость с шагом 4 (защита). Базовый набор защиты от шага 4 (rm -rf, force-push, drop базы) ставится сразу, до или одновременно с описанием — этим командам в проекте никогда не место, неважно какой проект. А вот специфичная защита (например, «не дай выкатить из dev-ветки», «не правь конкретный конфиг продакшена») имеет смысл добавлять только после описания: без понимания контекста она блокирует штатные команды, и приходится постоянно её отключать. Поэтому: базовая защита + два корневых файла-описания + специфичная защита под проект.

4

Защита: базовая сразу, специфичная — по реальным случаям

Базовый набор ставится сразу, до первого инцидента. Это известные всем катастрофы: rm -rf на системные пути, git push --force, DROP DATABASE, остановка nginx или postgres, перезапись секретных файлов. Не нужно ждать, пока агент это попробует у тебя — стартовый набор уже готов в Блоке 5, разворачивается одним промптом за минуту.

Специфичные сторожа (которые касаются именно твоего проекта) добавляются по мере появления конкретных кейсов: один раз агент попытался задеплоить из dev-ветки — добавился сторож на проверку ветки. Один раз полез править кастомный конфиг — добавился сторож на этот файл. Здесь именно «по реальным случаям», потому что заранее угадать специфику конкретного проекта нельзя.

5

Готовые навыки на повторяющиеся процедуры

Когда ты в третий раз ловишь себя на том, что объясняешь агенту одну и ту же последовательность действий, превращай её в готовый навык. Навык — это маленький файл-инструкция, у которого сверху записаны «триггерные фразы». Триггер — это слова, по которым агент должен догадаться, что пора подключить эту инструкцию. Например: «когда я говорю «снапшоты разъехались» — открой инструкцию update-snapshots и иди по её шагам». Так одна и та же процедура подключается автоматически, тебе не надо каждый раз пересказывать её агенту.

6

Правила поведения только когда правда нужны

Правило поведения появляется не от каждой поправки. Критерий простой: три раза за месяц поправил агента по одному и тому же поводу, пиши правило. До этого, не нужно. Иначе шкаф распухает, и агент тратит силы на чтение того, что в текущей задаче не относится к делу.

7

Раз в месяц открыть и посмотреть

Какие сторожа срабатывают регулярно, какие просто шумят. Какие навыки агент использует, какие лежат мёртвым грузом. Какие правила устарели. Это не косметика, а поддержание системы в живом состоянии. 15 минут в месяц.

ПОДСКАЗКА / ПОРЯДОК ВАЖЕН

Самая частая ошибка, начать с защиты или с навыков, минуя описание проекта. Тогда защита не понимает, что в твоём проекте опасно, а что норма. И навыки запускаются не вовремя. Сначала, два маленьких файла-описания. Это фундамент.

Применяю её на каждом новом проекте, в каком бы порядке его ни начинали.

НЕ СРАЗУ ВСЁ / ПАПКА РАСТЁТ

Папка .claude/ — не финальная архитектура, которую нужно сразу спроектировать целиком. Это рабочее пространство, которое растёт вместе с проектом. Старт с минимума, наращивание слоёв по реальным потребностям.

1

Глобальный каркас сначала

Прежде чем заводить проектные папки, настраиваешь ~/.claude/ один раз на всю систему. Туда уходят универсальные вещи: общий стиль работы агента, правила коммуникации, обязательные чеклисты, которые агент проходит прежде чем дать совет (читай: «открой файл, проверь команду, не отвечай из памяти»), защитный хук на опасные Bash-команды. Один раз настроил — дальше переиспользуется во всех проектах. Это «как мы пишем код вообще», независимо от стека.

2

Эталонный проект-донор

В системе должен быть один проект, в котором папка .claude/ доведена до полного стандарта: подагенты, скиллы, хуки, правила, memory/ с планами фич (memory/plans/ — это файлы, в которых агент держит многошаговый план работы между сессиями: разбил задачу на фазы, отметил, что сделано, и в следующий заход продолжает с той же страницы, не теряя контекст). Когда заводится новый сервис, не пишешь инструкции с нуля — копируешь структуру и переписываешь под специфику. Сокращает время первой настройки: примерно час активной работы вместо двух дней.

3

Документы перед специфичной автоматикой

В каждом новом проекте сначала пишутся два корневых файла. AGENTS.md — общий контракт для всех coding-агентов (структура репо, команды, code style, правила коммитов). CLAUDE.md — операционный гид специфично под Claude Code (где что лежит, архитектурные инварианты, грабли проекта). Эти два документа создают «каркас понимания».

Уточнение про порядок относительно хуков из шага 4: базовые хуки (rm -rf, push --force, drop) от описания не зависят и ставятся первыми, одновременно или раньше документов — они блокируют классы команд по жёсткому списку. А проектно-специфичные хуки (например, «не дай задеплоить из dev-ветки», «не правь кастомный конфиг продакшена») без описания проекта писать преждевременно: рискуешь заблокировать команду, которая в этом проекте штатная. Поэтому: базовые хуки + два корневых документа + проектно-специфичные хуки.

4

Хуки: базовый набор сразу, специфичные — по инцидентам

Базовый набор ставится с первого дня и не зависит от проекта. Это известные классы катастроф: rm -rf на системные пути, git push --force, git reset --hard, DROP DATABASE, systemctl stop nginx, запись в .env через >. Здесь ждать своего инцидента бессмысленно — все эти случаи уже произошли у других, паттерны известны. Ставится одним промптом из Блока 5.

Специфичные хуки добавляются после конкретного инцидента в этом проекте: сорвалась команда деплоя из dev-ветки — появился хук на проверку ветки. Агент попытался отредактировать кастомный конфиг продакшена — появился хук на блокировку этого пути. Эту часть нельзя спроектировать заранее, потому что специфика проектов разная.

5

Скиллы для повторяющихся процедур

Когда в третий раз ловишь себя на том, что объясняешь агенту одну и ту же последовательность шагов, выделяешь её в скилл. Скилл — это markdown-файл, у которого сверху лежит блок описания (frontmatter, YAML между двумя строками ---). В описании указаны триггерные фразы, по которым агент должен догадаться, что пора подключить эту процедуру.

Почему это работает. Описание (короткая фраза-триггер) лежит в контексте агента всегда. Тело скилла (длинная пошаговая инструкция) загружается только когда триггер совпал с твоим запросом — это и есть «ленивая загрузка». Поэтому скиллов можно держать десятки: они не тратят контекст-окно, пока не понадобятся.

6

Правила только когда они правда нужны

Правило в .claude/rules/ появляется не от каждой поправки. Критерий: три раза за месяц поправил агента по одному и тому же поводу — идёт в правило. До этого — нет. Иначе папка распухает, и агент тратит контекст на чтение того, что в текущей задаче нерелевантно.

7

Периодический обзор

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

04
BLOCK 04 / ИНЖЕНЕРНЫЙ РАЗРЕЗ Каждый ящик. Изнутри. Конкретика по слоям с упражнениями.
04
BLOCK 04 / ПРАКТИКУМ Шкаф под ключ. Через агента. Готовые промпты, по одному на каждый ящик.

Главное правило этого блока. Ты не создаёшь файлы руками. Ты копируешь промпт, вставляешь в окно агента, агент сам всё кладёт в нужное место. Если агент спрашивает «правда писать в этот файл?», отвечаешь «да». Если предлагает изменить структуру, соглашайся, у него больше контекста о твоём проекте.

ЧЕТЫРЕ ПРОМПТА ПОДРЯД / ПО ОДНОМУ НА ЯЩИК

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

Конкретика по каждому слою. Каждый подраздел: что это, как сделать, упражнение для проверки, эффект внедрения.

ЯЩИК С ОПИСАНИЕМ ПРОЕКТА

Зачем нужен. Каждый раз, когда ты открываешь новую беседу с агентом в своём проекте, он начинает с нуля. Не помнит, какая команда запускает проект, где что лежит, какие у тебя правила. Ты повторяешь одно и то же по десять раз в день. Ящик с описанием закрывает эту дыру.

Что внутри. Два маленьких текстовых файла в корне проекта:

  • AGENTS.md — общая шпаргалка для любого агента. Структура папок, команды для запуска и сборки, правила оформления кода, как делать коммиты.
  • CLAUDE.md — то же самое, но конкретно для Claude. Где найти бизнес-логику, какие у проекта правила, что часто ломали раньше (этот раздел обычно называют «грабли» или по-английски gotchas — буквально «ловушки»).

Других файлов в этом ящике нет. Описание короткое, по делу, без воды. Чтобы агент не тратил время на чтение, а быстро понял где он находится.

Как сделать. Открой Claude Code в папке своего проекта. Скопируй этот текст целиком и вставь в окно беседы:

1

Промпт для разворачивания описания проекта

Создай в корне моего проекта два файла-описания: AGENTS.md и CLAUDE.md.

Перед записью, изучи проект:
- какие папки внутри и за что отвечает каждая
- какой стек технологий используется
- какие команды запуска есть (посмотри package.json или pyproject.toml)
- есть ли уже README, и если да, не дублируй его

В AGENTS.md напиши коротко (40-80 строк):
- структура проекта (по папкам, одна строка на папку)
- команды (запуск, сборка, тесты, деплой если есть)
- правила оформления кода (4-5 пунктов, не больше)
- как делать коммиты (Conventional Commits если применимо)
- порядок чтения для агентов:
  1. AGENTS.md (этот файл)
  2. CLAUDE.md
  3. .claude/rules/*.md
  4. .claude/agents/*.md
  Ближайший в дереве побеждает.

В CLAUDE.md напиши (60-100 строк):
- где что лежит (бизнес-логика, роуты, схема БД)
- архитектурные правила (что нельзя ломать)
- инфра и деплой (одна короткая секция)
- грабли проекта (что часто ломали раньше, спроси меня
  или оставь заглушку «дополнить по мере появления»)

Перед записью, покажи мне план обоих файлов, я подтвержу.
Не добавляй маркетинговых слов вроде «революционный»
или «мощный». Длинные тире не использовать.

Почему это работает. Агент читает оба файла в самом начале каждой беседы. Знает структуру, команды, правила. Перестаёт спрашивать «как у тебя называется команда деплоя» и сразу делает. Это не магия, это обычный текстовый файл, просто положенный в правильное место.

ЛАЙФХАК / НЕ ИЩИ КУДА КЛАСТЬ ИНСТРУКЦИЮ, ПОПРОСИ АГЕНТА

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

У меня есть правило: <ОПИШИ ПРАВИЛО ОДНОЙ ФРАЗОЙ>.

Положи его туда, где оно будет работать всегда (если правило
универсальное, на все мои проекты), или только в этом проекте
(если касается только этого проекта). Сам реши, где уместнее.

Покажи мне путь к файлу и его содержимое после записи.

Агент знает, как у него устроены папки с инструкциями, и положит правило правильно. Тебе не нужно помнить ни одного пути.

УПРАЖНЕНИЕ 01 PROOF

Проверь, что описание попадает в контекст. Сразу после того, как агент создал файлы, открой новую беседу в том же проекте. Напиши: «расскажи в двух словах что это за проект и какая команда его запускает».

Что ты должен увидеть?

> Раскрыть ответ

Агент должен ответить уверенно и конкретно: «это такой-то проект, запускается командой такой-то». Без вопросов «расскажи мне про твой проект». Это значит, файлы лежат в правильном месте, агент их читает.

Если агент в новой беседе всё ещё спрашивает базовые вопросы, значит файлы лежат не там, где он ищет. Попроси его: «проверь корень проекта, там должны быть AGENTS.md и CLAUDE.md, прочитай их и расскажи что внутри». Если он не находит, файлы не созданы.

Открыл новую беседу с агентом. Десять минут уходит на «расскажи про свой проект, дай команду запуска, какие у тебя правила». Каждый раз заново. К десятой беседе ты уже не пишешь весь контекст и агент работает наугад.

Агент в первой реплике уже видит описание проекта. Сразу знает, что запускается командой npm run dev, что бизнес-логика в папке src/services. На задачу отвечает по делу, не уточняет элементарное.

ДОКУМЕНТЫ И ПОРЯДОК ЧТЕНИЯ

В корне репозитория лежат два файла. Оба обязательны для проектов с нетривиальной архитектурой.

AGENTS.md — общий контракт для всех coding-агентов. Claude Code, Codex CLI, Gemini CLI, Grok CLI — все четыре читают именно этот файл. Структура: описание репозитория, команды разработки и тестирования, code style, гайдлайны коммитов и пулл-реквестов, правила мульти-агентной работы если применимо.

CLAUDE.md — операционный гид специфично для Claude Code, дополнение к AGENTS.md. Сюда уходит то, что нужно именно при выполнении задач: шпаргалка по коду (где что лежит), архитектурные инварианты, инфра, выкатка (deploy), грабли (gotchas), доменная терминология.

Подкаталог .claude/rules/ хранит правила прогрессивного раскрытия. Один файл — одно правило. Активируются через блок <important if="условие">...</important>. Это просто markdown-разметка внутри файла правил: текст внутри блока попадает в контекст агента, только если LLM сам определит, что текущая ситуация подходит под условие. Решает проблему «слишком много правил — не помещаются в контекст»: файл auth.md загрузится, только когда я работаю с авторизацией; database.md — когда трогаю миграции.

READ ORDER / ПОРЯДОК ЧТЕНИЯ

Порядок чтения, который агент использует при старте сессии:

  1. <project>/AGENTS.md (ближайший к cwd)
  2. <project>/CLAUDE.md (ближайший к cwd)
  3. <project>/.claude/rules/*.md
  4. <project>/.claude/agents/*.md
  5. ~/.claude/CLAUDE.md (глобальный)

Принцип «ближайший в дереве побеждает». Если в проектном CLAUDE.md одно, а в глобальном другое, проектное приоритетнее.

ЛАЙФХАК / НЕ ВЫБИРАЙ УРОВЕНЬ РУКАМИ

Не помни наизусть структуру ~/.claude/. Когда появляется новое правило, скажи агенту одной фразой:

У меня правило: <правило, например: «не использовать длинные тире»>.
Положи его в нужное место: глобально (~/.claude/) или в проектный
.claude/rules/. Сам выбери уровень исходя из универсальности правила.
Напиши путь и содержимое после записи.

Claude Code сам решит, кому это правило, всем проектам или только текущему, и положит в ~/.claude/CLAUDE.md, в ~/.claude/rules/, либо в <project>/.claude/rules/<name>.md. Экономит время на «куда же это правильно класть».

1

Создать AGENTS.md в корне

Файл рядом с package.json или pyproject.toml. Минимальный скелет, около 80 строк:

# AGENTS.md

## Repo structure
- `src/`, исходный код
- `tests/`, тесты
- `scripts/`, служебные скрипты

## Commands
- `npm run dev`, разработка
- `npm run build`, сборка
- `npm run test`, тесты
- `npm run lint`, проверка стиля

## Code style
- TypeScript strict mode
- Файлы кода до 250 строк
- Без `any`

## Commits
Conventional Commits: feat, fix, refactor, docs, test, chore.

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

2

Создать CLAUDE.md в корне

Дополняет AGENTS.md проектной операционкой. Минимальный скелет, около 100 строк:

# CLAUDE.md

## Code navigation
- Бизнес-логика, `src/services/`
- API-роуты, `src/routes/`
- Схема БД, `src/db/schema.ts`

## Architectural invariants
- Один сервис, одна ответственность
- API-контракты валидируются Zod
- Никаких прямых SQL в роутах, только через repository-слой

## Infra & deploy
- Production, ветка `main`
- Деплой, `bash deploy.sh` (blue/green)
- Откат, `bash deploy.sh rollback`

## Gotchas
- Миграции применяются вручную перед деплоем
- При правке схемы, обновить `src/db/types.ts` (не автогенерится)

Под gotchas попадает всё, что один раз сломали. Не «частые ошибки в индустрии», а конкретные грабли проекта.

3

Прописать read order в самом AGENTS.md

В верх AGENTS.md добавляешь блок:

## How agents should read this repo

1. AGENTS.md (this file), contributor contract
2. CLAUDE.md, operations guide
3. .claude/rules/*.md, behavioural rules
4. .claude/agents/*.md, subagents

Nearest in tree wins. Project files override global ~/.claude/.

Это страховка: даже если агент почему-то не загрузил иерархию через хук, он прочтёт её прямо из документа.

УПРАЖНЕНИЕ 01 PROOF

Проверь свой проект. Открой корень своего основного рабочего проекта. Выполни:

ls AGENTS.md CLAUDE.md 2>&1
ls -la .claude/ 2>&1

Какие файлы есть, каких нет?

> Раскрыть ответ

Если оба файла отсутствуют, начинай с них (шаги 1 и 2 выше). Если есть только README.md, перенеси оттуда контрибьюторскую часть в AGENTS.md, а операционные детали в CLAUDE.md. Если есть AGENTS.md, но нет CLAUDE.md, добавь второй файл с code navigation и gotchas: их обычно нет в первом.

Если папки .claude/ нет вообще, на этом этапе её можно не создавать. Папка появится после шагов из подразделов 4.2 и 4.3.

Агент при старте читает только название репозитория и первые файлы, на которые наткнулся. На вопрос «как тут принято писать тесты» отвечает усреднённо по индустрии, не по проекту. На «задеплой релиз» сначала минут 10 разбирается, какие команды у нас деплоят.

Агент в первой реплике видит AGENTS.md и CLAUDE.md. Знает, что тесты в tests/, команда npm run test, что деплой через bash deploy.sh, что правка src/db/schema.ts требует обновления src/db/types.ts. На задачу «задеплой релиз» сразу идёт в правильный скрипт.

ЯЩИК С ГОТОВЫМИ НАВЫКАМИ

Зачем нужен. В работе постоянно повторяются типовые процедуры. «После правки UI обнови снимки тестов». «Перед коммитом запусти линтер». «После фичи пройдись по докам и обнови их». Каждый раз ты объясняешь это агенту с нуля. Иногда забываешь, агент тоже забывает. Готовые навыки превращают типовые процедуры в маленькие инструкции, которые агент сам подключает по триггеру.

Что внутри. Папка .claude/skills/ в твоём проекте. Внутри — подпапки, по одной на навык. В каждой подпапке — файл с описанием: когда подключить и что делать пошагово. Агент сам читает все описания, и когда ты говоришь подходящую фразу, подключает нужный навык.

Почему такая структура. Описание навыка («когда подключить») агент держит в голове всегда, в каждой сессии. А пошаговую инструкцию («что делать») он подгружает только когда ты сказал триггерную фразу. Это «ленивая загрузка»: можно завести десятки навыков, и они не съедают память агента, пока не понадобятся.

ОТЛИЧИЕ ОТ ОБЫЧНОГО ПРОМПТА

Обычный промпт ты копируешь каждый раз. Навык, пишешь один раз, дальше агент подключает его сам, как только ты скажешь триггерную фразу. «Снапшоты разъехались», и агент уже идёт обновлять, не объясняй ему процедуру заново.

НЕ ВСЕ НАВЫКИ НАДО ПИСАТЬ С НУЛЯ / ГОТОВЫЕ ПЛАГИНЫ

Anthropic выпустила десятки готовых наборов навыков — они называются «плагинами» (plugins). Вместо того чтобы вручную писать «как делать ревью кода», «как делать коммиты по Conventional Commits», «как чинить CLAUDE.md по проекту» — можно просто включить готовый плагин одной командой. Примеры из стандартного набора: code-review, commit-commands, claude-md-management, feature-dev, frontend-design, skill-creator, playwright (тестирование UI), serena (умный поиск по коду). Подключаются плагины через специальный экран в Claude Code или через настройки. Прежде чем писать свой навык — проверь, нет ли уже готового. Сэкономишь час и избежишь дублирования.

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

1

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

В этом проекте у меня есть процедура, которую я повторяю
часто. Опишу её здесь:

  <ОПИШИ СВОЮ ПРОЦЕДУРУ В 1-2 ПРЕДЛОЖЕНИЯХ. НАПРИМЕР:
  «после правки фронтенд-компонента нужно прогнать снимки
  тестов, и если они упали, посмотреть диффы и обновить
  только те, где разница ожидаемая»>

Преврати её в готовый навык. Сделай так:

1. Создай папку .claude/skills/<короткое-имя-навыка>/
2. Внутри файл SKILL.md со следующей структурой:
   - сверху блок описания (frontmatter):
     name: <короткое-имя-навыка>
     description: краткое описание триггерных фраз,
       какие слова я скажу, по которым этот навык
       должен подключиться
     allowed-tools: список только тех инструментов,
       которые реально нужны (Read, Edit, Bash и т.п.)
   - дальше тело: пронумерованные шаги, что именно
     надо сделать, что проверить, что сделать при ошибке.

3. Покажи мне получившийся файл и попроси подтверждение.

4. После создания, открой новую беседу и проверь, что навык
   подключается, когда я говорю триггерную фразу. Если не
   подключился, переформулируй описание триггера, добавь
   ещё несколько вариантов фраз.

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

Почему это работает. Принцип уже описан выше — агент видит короткое описание сразу, тело подгружает только по триггеру. На практике это значит: ты можешь держать сразу 20-30 навыков, и они не «висят грузом» в каждой сессии. Каждый ждёт своего момента, как папки в шкафу: лежат, ничего не весят, открываешь нужную, когда требуется.

УПРАЖНЕНИЕ 02 FIND·REPEAT

Найди свой третий повтор. Открой переписку с агентом за последний месяц. Найди фразы вроде:

  • «не забудь перед коммитом ...»
  • «после правки X нужно ...»
  • «деплой делается через ...»

Если хотя бы одна такая фраза повторяется три раза и больше — это твой первый кандидат на готовый навык.

> Раскрыть ответ

Если повторов нет, отложи навыки на потом. Они появятся естественно, когда накопится опыт работы с агентом.

Самый частый первый навык, «уборка после фичи». Дописал функциональность, скажи агенту «прибери проект»: пусть проверит документы на актуальность, запустит тесты, сообщит что забыл. Если такой процедуры у тебя ещё нет, начни с неё.

ОТСТУПЛЕНИЕ / СУБ-АГЕНТЫ — НЕ ПОДВИД НАВЫКА

Дальше идёт раздел про суб-агентов. Это не пятый ящик и не разновидность навыка — это отдельная категория. Лежит рядом в шкафу, потому что настраивается похожим файлом-описанием, но работает по другой логике. Мы не выносим её в отдельный блок только чтобы не плодить ящики у читателя: концептуально пара «навыки + суб-агенты» — это «инструменты делегирования», просто на разных уровнях.

СУБ-АГЕНТЫ. КОГДА ОТДАЁШЬ ЗАДАЧУ ДРУГОМУ ПОМОЩНИКУ

Что это. Обычно ты разговариваешь с одним агентом в одном чате. Он держит в голове весь твой диалог, твои файлы, всё, что ты успел обсудить. Это его «контекст». Суб-агент — это отдельный помощник, который запускается в чистой голове: он не помнит твой диалог, у него своё рабочее пространство, свой набор инструментов и иногда даже отдельная (более простая или более мощная) модель. Делает свою задачу, возвращает только готовый результат.

Чем отличается от обычного навыка. Навык — это когда агент делает сам, в твоём же диалоге, по знакомой инструкции. Суб-агент — это когда агент передаёт задачу другому помощнику, тот работает в стороне и присылает только итог. Ты не видишь весь его процесс — это как делегировать коллеге. Сильно экономит твоё внимание и память: основной диалог не загромождается тысячей строк «вот я прочитал такой-то файл, теперь такой-то».

КОГДА ИМЕЕТ СМЫСЛ ВЫЗВАТЬ
  • Большой поиск по проекту. «Найди мне все места, где используется такой-то параметр, и собери список». Без суб-агента основной диалог захламится содержимым десятков файлов.
  • Параллельный аудит. Один помощник смотрит дизайн, другой проверяет тексты, третий ищет ошибки. Все работают одновременно, ты получаешь три коротких отчёта.
  • Разбор большого объёма. «Прочитай эти 20 файлов и сделай выжимку в десять строк». Помощник прочитает, основной диалог получит только выжимку.
  • Свежий взгляд на свою же работу. Когда написал что-то сложное и хочешь, чтобы независимый помощник проверил, не упустил ли ты ошибки. Чистая голова видит то, что замыленная не замечает.

Когда не надо. Простая правка, короткая задача, разговор, где нужно итеративно подбирать решение. Запуск суб-агента стоит времени и токенов, смысл появляется, только если задача правда большая или независимая.

УПРАЖНЕНИЕ 02·1 DELEGATE

Сделай первое делегирование. Скажи агенту:

Запусти суб-агента, чтобы он прошёл по моему проекту,
прочитал все README/AGENTS/CLAUDE-файлы и собрал
короткий список (5-10 пунктов): что в этом проекте
важнее всего знать новому человеку.

Я хочу получить только итог, без процесса.

Что должно произойти?

> Раскрыть ответ

Агент сообщит, что запустил отдельного помощника, и через какое-то время вернётся с готовым списком. В твоём основном диалоге ты не увидишь, как суб-агент читал каждый файл (это происходит «за кадром»), увидишь только финальный список.

Если агент попытался читать всё сам, без делегирования, основной диалог быстро захламится. Сравни: сколько строк ушло на «вот я прочитал X, теперь Y» без суб-агента, и сколько с ним. Разница и есть смысл этой механики.

СКИЛЛЫ

Скилл — это директория <scope>/skills/<name>/SKILL.md с YAML-frontmatter (блок описания между двумя --- в начале файла, см. пример ниже) и телом-инструкцией. От subagent отличается принципиально.

Subagent (подагент) — отдельный экземпляр LLM, который запускается из основной сессии с собственным контекстом, своим набором инструментов и опционально другой моделью. Используется, когда нужно изолировать побочную задачу: длинный поиск, разбор логов, параллельный аудит. Из подагента в основной диалог приходит только саммари результата — промежуточные чтения и Grep-выводы остаются в его контексте.

Skill — расширенная инструкция, которая работает в общем контексте основной сессии. Активируется по семантическому совпадению описания с пользовательским запросом. Используется, когда нужна переиспользуемая процедура или сценарий действий (английский термин — playbook). Тело файла загружается лениво — только когда триггер сработал.

КОГДА ЧТО / SKILL VS SUBAGENT

Скилл — переиспользуемая процедура («после фичи синхронизируй доки», «как делегировать задачу Codex»). Subagent — изолированный исполнитель в чистом контексте («прочти 20 файлов и верни саммари», «code-validator после фичи»).

ANTHROPIC PLUGINS / ТРЕТИЙ УРОВЕНЬ ПОВЕРХ ГЛОБАЛЬНОГО И ПРОЕКТНОГО

Помимо ~/.claude/skills/ и <project>/.claude/skills/ существует marketplace плагинов. Это пакеты, поставляющие сразу набор skills, slash-команд, иногда subagents и хуков. Установка — через UI Claude Code или ~/.claude/plugins/installed_plugins.json. Стандартный набор Anthropic-managed включает: code-review, commit-commands, feature-dev, claude-md-management, frontend-design, skill-creator, playwright, serena, typescript-lsp, pyright-lsp, playground, context7, security-guidance, gitlab, telegram, claude-code-setup. Активируются глобально или per-project через enabledPlugins в settings.json. Прежде чем писать свой skill — проверь, нет ли в плагинах. feature-dev и code-review часто перекрывают то, что инженер пишет руками.

Структура файла скилла:

---
name: housekeep
description: Запусти после завершения фичи в любом проекте. Проверяет,
  что доки синхронизированы с кодом, типы регенерированы, тесты зелёные.
  Триггеры, «доделал фичу X», «закончил Y», «готово».
allowed-tools:
  - Read
  - Edit
  - Bash
  - Grep
---

# Housekeep skill

Дальше идёт тело инструкции в произвольной форме.

Самая важная часть — description. Агент видит описание скилла всегда, в каждой сессии. Тело подгружает только когда чьи-то слова в чате семантически совпали с описанием. Поэтому если описание плохое (общее, без триггерных слов), скилл никогда не сработает или будет срабатывать невпопад. Хорошее описание — конкретные триггеры словами пользователя: не «утилита для тестов», а «обнови snapshot-тесты после правки UI; триггеры — «снапшоты разъехались», «нужно обновить snapshots»».

1

Создать первый скилл

В проекте есть процедура, которую ты повторяешь регулярно. Например: «обновить snapshot тестов после правки UI-компонента».

Создай каталог:

mkdir -p .claude/skills/update-snapshots

Файл .claude/skills/update-snapshots/SKILL.md:

---
name: update-snapshots
description: Обнови snapshot-тесты после правки UI. Триггеры,
  «прогнал snapshot-тесты, упали», «нужно обновить snapshots»,
  «снапшоты разъехались».
allowed-tools:
  - Bash
  - Read
---

# Update snapshots

1. Покажи список упавших snapshot-тестов:
   `npm run test -- --testPathPattern=snapshot`

2. Сравни диффы. Для каждого:
   - Если разница ожидаемая (новый дизайн), пометь для обновления
   - Если неожиданная (баг), останови процедуру и доложи

3. Обнови подтверждённые:
   `npm run test -- -u --testPathPattern=snapshot`

4. Перезапусти все тесты, убедись что зелёно.
2

Проверить, что скилл найден

Запусти агент в проекте. В новой сессии напиши: «снапшоты разъехались, обнови».

Агент в ответе должен явно упомянуть, что использует skill update-snapshots. Если упоминания нет, проблема в описании: триггер не семантически зацепился за фразу пользователя. Переформулируй description, добавив варианты формулировок.

3

Глобальные vs проектные скиллы

Скилл может лежать в ~/.claude/skills/ (доступен во всех проектах) или в <project>/.claude/skills/ (только в этом проекте).

Глобальные подходят для универсальных процедур: «housekeep», «code-navigation», «commit-commands». Проектные, для специфики стека: «как обновить миграцию в этом проекте», «как выкатить blue/green в этом проекте».

При совпадении имени проектный перебивает глобальный.

УПРАЖНЕНИЕ 02 GREP·HISTORY

Найди свой третий повтор технически. Лог сессий Claude Code лежит в ~/.claude/history.jsonl (одна реплика на строку, JSON). Самый быстрый способ найти повторы:

# 1. Извлекаем тексты пользовательских реплик за последний месяц
jq -r 'select(.role=="user") | .content' ~/.claude/history.jsonl \
  | head -2000 \
  > /tmp/last-prompts.txt

# 2. Ищем характерные триггер-фразы про деплой/билд/коммит
grep -iE 'не забудь|перед (коммитом|деплоем)|после правки|нужно (пересобрать|обнови)' \
  /tmp/last-prompts.txt | sort | uniq -c | sort -rn | head -20

Любая фраза с count ≥ 3 — кандидат на скилл. Если на проекте используется claude-code-bot или другой логгер промптов, источник тот же.

> Что делать с результатом

Группируй по семантике (не по точному совпадению — формулировка плавает). Условный кластер «обнови snapshots после правки UI» (10 повторов) — переезжает в .claude/skills/update-snapshots/SKILL.md; его триггеры в description: «снапшоты разъехались», «прогнал snapshot-тесты, упали», «обнови snapshots». Если повторов 0 — либо ты только начал работать с агентом и истории мало, либо уже всё автоматизировано (проверь активацию существующих скиллов через сообщения сессии).

В третий раз за месяц объясняю агенту: «после правки бекенд-роута проверь, что фронтенд-клиент в lib/api.ts всё ещё совпадает по типам». Каждый раз пишу ту же инструкцию заново. Иногда забываю, и агент мне коммитит расхождение.

Создан скилл sync-api-types с описанием «после правки бекенд-роута синхронизируй фронтенд-клиент». Достаточно сказать «обновил роут /bookings, синхронизируй». Агент сам подтягивает скилл и идёт по шагам.

NOTE / SUBAGENT ≠ SKILL

Дальше — про subagents. Это не подвид скилла; это отдельный примитив со своим контекстным окном, своим toolset'ом и (опционально) другой моделью. Описан рядом со скиллами только потому что синтаксис файлов-описаний похож. На уровне «4 ящика в шкафу» subagents концептуально соседствуют со скиллами как «инструменты делегирования», но это разная механика — не путать.

SUBAGENTS. ИЗОЛИРОВАННЫЙ КОНТЕКСТ ПОД ЗАДАЧУ

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

Файл агента — <scope>/agents/<name>.md. Структура похожа на скилл, но синтаксис frontmatter чуть отличается: для подагента поле инструментов называется tools: (а не allowed-tools:, как у скилла — это легко перепутать). Поля: name (имя), description (триггер-описание), tools (список разрешённых инструментов — ограничивает, что подагент может делать), опционально model (можно назначить более дешёвую модель типа Haiku для простых задач). Дальше идёт тело — инструкция исполнителю.

КОГДА ИМЕЕТ СМЫСЛ / ЧЕТЫРЕ КЕЙСА
  • Broad search в большом репо. «Найди все места, где используется флаг FEATURE_X, верни file:line + одну строку контекста». Без subagent основной контекст захлёбывается дампами grep.
  • Параллельный аудит. Запустить одним сообщением три subagent-а: frontend-review, backend-review, security-review. Работают параллельно, в основной диалог приходят три коротких отчёта.
  • Token-heavy чтение. «Прочитай эти 50 markdown-уроков и собери таблицу противоречий». Subagent читает, основная сессия получает только таблицу.
  • Read-only critic с чистым контекстом. После имплементации фичи в основной сессии запустить code-validator subagent с read-only allow-list. У него нет твоей предвзятости («я только что это написал, выглядит ок»), он смотрит свежим взглядом на синтаксис, типы, импорты.

Когда не надо. Тривиальные правки, короткие задачи, итеративная работа в диалоге. Запуск подагента — это лишний цикл взаимодействия (round-trip) и дополнительные токены: оправдан, только если задача либо большая (нужна изоляция контекста), либо независимая (можно параллелизовать), либо критичная (нужен свежий взгляд критика).

1

Создать первый subagent

Файл .claude/agents/code-validator.md:

---
name: code-validator
description: Read-only critic. Запускается после имплементации
  фичи. Проверяет синтаксис, типы, импорты, структурные
  ошибки. НЕ проверяет бизнес-логику, это уже работа человека.
tools: Read, Grep, Glob
model: claude-haiku-4-5
---

# Code validator

Ты read-only критик. У тебя нет прав на запись.

1. Прочитай diff последнего коммита.
2. Проверь по списку:
   - все импорты резолвятся
   - типы согласованы по сигнатурам
   - нет orphan-ссылок на удалённые символы
   - нет очевидных синтаксических ошибок
3. Верни короткий отчёт: max 10 пунктов, по каждому,
   file:line + 1 строка причины. Без воды.

Допуск только Read/Grep/Glob: критик не должен ничего менять. Модель Haiku, дешевле и быстрее на простых проверках синтаксиса.

2

Вызвать subagent из основной сессии

В диалоге пишешь:

Закончил имплементацию фичи. Запусти code-validator subagent
на последнем коммите, верни его отчёт.

Основной агент спавнит subagent, ждёт результат, возвращает в твой диалог только итоговый отчёт. Длинные чтения файлов и Grep-выводы остаются в контексте subagent-а и не попадают в твою историю.

ВНИМАНИЕ / SUBAGENT НАСЛЕДУЕТ ТОЛЬКО ТО, ЧТО ОПИСАНО

Subagent не видит автоматически весь твой контекст основной сессии. Что хочешь ему отдать — передаёшь явно в задаче (пути к файлам, ссылку на коммит, конкретный вопрос). MCP-инструменты (Model Context Protocol — это способ подключить к агенту внешние сервисы: PostgreSQL, GitHub, Sentry и т. п.), которые загружены у тебя, в subagent попадают только если перечислены в его поле tools:. Если делегируешь задачу, требующую инструмента X, проверь, что X есть в списке разрешённых, иначе подагент молча не сможет его использовать.

ЯЩИК С ЗАЩИТОЙ

ПРО ТЕРМИНЫ НА СХЕМЕ ВЫШЕ

На схеме мелькают «EXIT CODE 2» и «STDERR» — это не магия, это два простых технических понятия. Когда программа закончилась, она возвращает число — «код возврата» (англ. exit code). 0 — всё хорошо. Любое другое число — ошибка. Договор в Claude Code такой: если хук вернул именно 2, агент понимает «команду выполнять нельзя» и не выполняет её. STDERR — это «поток ошибок», отдельная дорожка, по которой программа пишет сообщения для людей. Текст из stderr попадает агенту в чат как причина блокировки. Дальше по тексту я этими словами пользуюсь без второго объяснения.

Зачем нужен. Самое страшное в работе с агентами не «он не понял, что я хочу». Самое страшное, «он понял слишком буквально и стёр что-то важное». Ты попросил агента почистить временные файлы, агент случайно ушёл в системную папку и снёс конфигурацию. Ты попросил откатить локальные правки, агент сделал откат, который снёс несохранённый код. Защита нужна, чтобы такого не было физически.

Что внутри. Маленькие сторожевые скрипты, которые срабатывают перед каждой опасной командой. Если команда подходит под опасный шаблон, сторож её останавливает, агент видит причину и идёт другим путём. Никаких ручных подтверждений, никаких «а ты точно уверен», просто блок до выполнения.

ПОЧЕМУ ЭТО ПЕРВОЕ / 90% БЕД ИДУТ ЧЕРЕЗ ОДИН КАНАЛ

Через выполнение команд в проекте идёт примерно девять из десяти случаев, когда что-то идёт не так. Стирание папок, откаты, остановки сервисов, перезапись секретных файлов. Закрыл этот канал, закрыл большинство сценариев одной защитой. Это не паранойя, это базовая гигиена.

Что именно блокировать. Стартовый набор готов и ставится сразу, угадывать ничего не нужно. Это известные классы катастроф из общей практики, у каждого свой автор-«первооткрыватель» среди разработчиков по всему миру:

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

Эти классы ставишь, не дожидаясь, пока агент попробует у тебя. Расширять набор уже под свой проект — да, по реальным случаям: появился свой класс опасных команд, добавил его сторожем. Но базовая часть — с первого дня.

Как сделать. Открой новую беседу с агентом в любой папке (не обязательно в проекте). Скопируй промпт ниже:

1

Промпт для развёртывания базовой защиты

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

Сделай так:

1. Создай маленький сторожевой скрипт в моей домашней
   папке агента (~/.claude/hooks/guard-bash.sh).
   Скрипт должен останавливать с понятным сообщением
   следующие классы команд:

   а) Удаление папок верхнего уровня в системе:
      /opt, /etc, /var, /usr, /home, корня /, домашней ~.
   б) Принудительный откат локальных правок,
      который потеряет несохранённый код.
   в) Удаление веток без подтверждения слияния.
   г) Полное стирание таблиц или баз данных
      (DROP DATABASE, DROP TABLE, TRUNCATE).
   д) Остановка nginx, postgres, redis, docker.
   е) Запись в файлы вида .env через перенаправление вывода.

   Когда команда блокируется, в сообщении должно быть видно,
   почему именно. Чтобы агент понял причину и пошёл другим путём.

2. Подключи скрипт как защитный хук на запуск Bash в файле
   ~/.claude/settings.json. Если файл уже есть, аккуратно
   допиши, не затирай существующее.

3. Поставь второй защитный хук на правку секретных файлов
   (.env и подобные). Этот хук срабатывает, когда агент
   пытается отредактировать или перезаписать такой файл.
   Сообщение об ошибке должно объяснять, какой именно файл
   защищён и почему.

4. После установки, попроси меня выполнить две команды
   для проверки. Безопасную (например, ls /opt) и опасную
   (rm -rf /opt/test-XXXX). Безопасная должна пройти,
   опасная, заблокироваться с понятным сообщением.

Не добавляй классы блокировки, которые я не упомянул.
Хочу понимать, что именно стоит на защите.

Почему это работает. Защита поставлена на самый низкий уровень, перед каждым запуском команды. Не зависит от того, какой именно агент работает, какая модель, какая версия. Командам просто запрещено выполняться. Агент видит сообщение об ошибке, признаёт, идёт другим путём, например, переспрашивает у тебя что именно почистить, и удаляет точечно.

УПРАЖНЕНИЕ 03 VERIFY·BLOCK

Проверь блокировку. После того как агент развернул защиту, открой новую беседу. Напиши:

Выполни в терминале команду rm -rf /opt/test-aaa-bbb-ccc, я хочу убедиться что защита работает.

Что должно произойти?

> Раскрыть ответ

Агент попытается выполнить команду. Сторожевой скрипт перехватит, увидит шаблон rm -rf /opt, остановит выполнение и покажет агенту причину блокировки. Агент в ответе скажет тебе: «команда заблокирована защитным хуком, причина такая-то».

Ничего не удалится. Это и есть нормальная работа защиты.

Если команда выполнилась, что-то не так. Попроси агента проверить: скрипт защиты создан и помечен исполняемым; в файле настроек упомянут правильный путь к нему; файл настроек, корректный текстовый формат без поломанных скобок.

Попросил агента почистить временные файлы. Агент сделал rm -rf /opt/cache. Папка оказалась не временной, там лежала конфигурация одного из сервисов. Час восстановления из бэкапа, сорванный вечер.

Та же самая команда останавливается до выполнения. Агент видит сообщение «удаление /opt запрещено», признаёт, переспрашивает: «что конкретно почистить?». Я говорю «временные кэши в папке проекта». Чистит точечно. Никаких потерь.

ХУКИ

Хук (буквально «крючок») — shell-скрипт (маленькая программка, которую запускает bash), который Claude Code сам вызывает на определённых событиях жизненного цикла сессии. На каком событии что запускать — описано в <scope>/settings.json в секции hooks.

Девять событий, на которые можно подписаться:

СобытиеКогда срабатывает
SessionStartСтарт сессии
UserPromptSubmitПользователь отправил сообщение
PreToolUseПеред вызовом инструмента (Bash, Edit, Write)
PostToolUseПосле вызова инструмента
NotificationОтправка уведомлений
PermissionRequestЗапрос permission у пользователя
StopКонец каждого ответа агента
StopFailureСбой в обработке
SessionEndЗавершение сессии

Хук на событии PreToolUse (срабатывает перед вызовом любого инструмента — Bash, Edit, Write) может вернуть код возврата 2 (exit code 2 — это сигнал «отмена с ошибкой»). Когда агент видит этот код, он не выполняет команду, а читает то, что хук написал в поток ошибок (stderr — стандартный поток для сообщений об ошибках, отдельный от обычного вывода). Текст из stderr попадает агенту в контекст как причина блокировки — и он может пойти другим путём.

ЗАЧЕМ PRETOOLUSE BASH / 90% КАТАСТРОФ ИДУТ ЧЕРЕЗ BASH

Через bash идёт около 90% катастрофических действий: rm -rf, git push --force, DROP DATABASE, systemctl stop nginx. Закроешь канал бэша, закроешь большинство сценариев одним хуком. Это первое, что ставлю в любом проекте.

ЗАЩИТА ОТ ДЕСТРУКТИВА

Главный защитный слой — guard-bash.sh в ~/.claude/hooks/. Срабатывает на каждую Bash-команду как PreToolUse hook. Если команда подходит под опасный шаблон, скрипт возвращает exit 2, команда отменяется, причину блокировки агент читает из stderr.

Что блокируется:

КлассPatternПочему
Force git pushgit push --force, git push -fПерезатирает remote
Жёсткий resetgit reset --hardТеряет локальные коммиты
Force-cleangit clean -*f*Удаляет нетрекаемые файлы
Force-delete branchgit branch -DТеряет несмёрженные изменения
RM на системные путиrm -rf /, /opt, /etc, /var, /usrСнос инфры
Stop nginxsystemctl stop nginxВсе сайты лягут
Stop postgressystemctl stop postgresВсе приложения упадут
Массовое удалениеfind ... -deleteАльтернативный путь к rm -rf
Деструктивный SQLDROP DATABASE, TRUNCATEСнос данных
DELETE без WHEREЭвристика по текстуСотрёт всю таблицу
Запись в .env> .env, tee .envОбходит protection через Edit
SSH-обходssh ... 'rm -rf'Обход guard на удалённом сервере

Все классы выше — известные катастрофы, на которых наступали все. Их я ставлю сразу при заведении нового проекта, не дожидаясь инцидента у себя. Расширяется этот список только специфичными для проекта классами: например, «не дай агенту запустить terraform apply без флага -target» появляется уже после того, как я один раз словил полное переразвёртывание стенда. Базовая часть универсальна и стоит с первого дня; специфичная — растёт по реальной истории конкретного проекта.

FIG. 02 / GUARD-BASH LIVE TEST PRE·TOOL·USE

Введи произвольную bash-команду. Шаблоны (regex — это формальный язык поиска подстрок по правилу, а не по точному совпадению) из реального хука применяются прямо в браузере, никаких запросов на сервер. Цель — увидеть, на чём именно срабатывает каждый класс защиты.

$
// MATCHES · REGEX-АДАПТАЦИЯ ПРАВИЛ ИЗ GUARD-BASH.SH
1

Создать guard-bash.sh

Файл ~/.claude/hooks/guard-bash.sh:

#!/usr/bin/env bash
# Pre-bash guard: блокирует деструктив до выполнения.

CMD="${CLAUDE_TOOL_INPUT_COMMAND:-}"

block() {
  local reason="$1"
  echo "BLOCKED: $reason" >&2
  echo "Command: $CMD" >&2
  exit 2
}

# rm -rf на системные пути
if echo "$CMD" | grep -qE 'rm[[:space:]]+-[a-zA-Z]*r[a-zA-Z]*f[a-zA-Z]*[[:space:]]+(/|/opt|/etc|/var|/usr|/home|~)([[:space:]]|$)'; then
  block "rm -rf on system path is forbidden"
fi

# git push --force
if echo "$CMD" | grep -qE 'git[[:space:]]+push[[:space:]]+.*(--force|-f([[:space:]]|$))'; then
  block "git push --force is forbidden, create a new commit instead"
fi

# git reset --hard
if echo "$CMD" | grep -qE 'git[[:space:]]+reset[[:space:]]+.*--hard'; then
  block "git reset --hard loses uncommitted work"
fi

# DROP/TRUNCATE
if echo "$CMD" | grep -qiE '\b(DROP[[:space:]]+(DATABASE|TABLE|SCHEMA)|TRUNCATE)\b'; then
  block "destructive SQL is forbidden, use migration"
fi

# systemctl stop critical
if echo "$CMD" | grep -qE 'systemctl[[:space:]]+(stop|disable)[[:space:]]+(nginx|postgresql|postgres)'; then
  block "stopping critical service is forbidden"
fi

# .env через redirect
if echo "$CMD" | grep -qE '(>|>>|tee)[[:space:]]+\.env'; then
  block "writing .env via shell redirect bypasses protections"
fi

exit 0

Сделать исполняемым:

chmod +x ~/.claude/hooks/guard-bash.sh
2

Зарегистрировать хук в settings.json

Файл ~/.claude/settings.json:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "bash ~/.claude/hooks/guard-bash.sh"
          }
        ]
      }
    ]
  }
}

matcher: "Bash" означает, что хук срабатывает только перед вызовами инструмента Bash. На Edit и Write он не срабатывает — для них есть отдельная защита, которую регистрируешь следующим шагом.

3

Добавить блокировку чувствительных файлов

Защита бэша не покрывает прямые правки .env через Edit/Write. Добавь второй PreToolUse-хук, инлайн в settings.json:

{
  "matcher": "Edit|Write|MultiEdit",
  "hooks": [
    {
      "type": "command",
      "command": "FILE=\"${CLAUDE_TOOL_INPUT_FILE_PATH:-}\"; case \"$FILE\" in *.env|*.env.*|*credentials*|*secrets*) echo \"BLOCKED: $FILE protected\" >&2; exit 2;; esac"
    }
  ]
}

Этот хук читает путь файла из переменной, и если он попадает под опасный паттерн, блокирует операцию. Без него агент может перезаписать .env через Write и снести продакшн-конфиг.

УПРАЖНЕНИЕ 03 DRY·RUN·HOOK

Прогон guard-скрипта без агента. Хуки полезно проверять напрямую, до того как нагружать ими сессию. Хук читает имя команды из переменной TOOL_INPUT (JSON-объект с полем command). Эмулируем вызов вручную:

# 1. Безопасная команда — должна пройти (exit 0, нет вывода).
#    Имя переменной зависит от того, как именно guard-bash.sh
#    читает команду. В реальном скрипте смотри вверху файла:
#    обычно это либо TOOL_INPUT (JSON-объект с полем "command"),
#    либо CLAUDE_TOOL_INPUT_COMMAND (готовая строка команды).
#    Ниже два варианта — попробуй тот, который у тебя в скрипте.

# Вариант А: скрипт парсит TOOL_INPUT как JSON
TOOL_INPUT='{"command":"ls /opt"}' bash ~/.claude/hooks/guard-bash.sh
echo "exit=$?"

# Вариант Б: скрипт читает CLAUDE_TOOL_INPUT_COMMAND напрямую
CLAUDE_TOOL_INPUT_COMMAND='ls /opt' bash ~/.claude/hooks/guard-bash.sh
echo "exit=$?"

# 2. Опасная команда — должна заблокироваться (exit 2, BLOCK в stderr)
TOOL_INPUT='{"command":"rm -rf /opt/test-XXX"}' bash ~/.claude/hooks/guard-bash.sh
echo "exit=$?"

# 3. JSON-валидность settings.json (поломка JSON = молчаливое отключение хуков)
python3 -m json.tool ~/.claude/settings.json > /dev/null && echo "JSON ok"

# 4. Хук исполняемый
test -x ~/.claude/hooks/guard-bash.sh && echo "executable" || echo "FAIL: chmod +x"
> Что должен показать вывод

Шаг 1: exit=0, без сообщений. Шаг 2: в stderr — BLOCK: rm на системный путь, exit=2. Шаг 3: JSON ok. Шаг 4: executable.

Если шаг 2 вернул exit=0 — паттерн в guard-bash.sh не покрывает эту команду. Если шаг 3 ругнулся — JSON битый, хуки не работают вообще (Claude Code молча игнорирует поломанные конфиги, что особенно опасно). Если шаг 4 — добавь chmod +x.

Только после успешного dry-run открывай новую сессию агента и проси его выполнить опасную команду — это контрольная проверка end-to-end.

В одной из сессий агент при чистке временных файлов попытался выполнить rm -rf /opt/cache. Команда выполнилась, и /opt/cache оказался не временным каталогом, а конфигурацией одного из сервисов. Восстановление, час работы и ручная сборка конфига из бэкапа.

Та же команда блокируется хуком до выполнения. В stderr появляется текст BLOCKED: rm -rf on system path is forbidden. Агент видит причину, признаёт блокировку, идёт другим путём: уточняет у меня, что именно нужно почистить, и удаляет точечно.

ХУКИ НА ДОБАВЛЕНИЕ КОНТЕКСТА

Помимо блокировки, хуки полезны для добавления контекста (англ. «context injection» — буквально «инжекция»). На событии SessionStart (срабатывает в самом начале сессии) хук может напечатать любой текст в специальное поле additionalContext, и агент увидит этот текст в первой же реплике — как если бы я сам его вставил в чат.

Пример ~/.claude/hooks/session-start.sh:

#!/usr/bin/env bash
echo "## Session context"
echo ""
echo "**cwd:** $(pwd)"
echo ""
echo "**Closest AGENTS.md:** $(find . -maxdepth 4 -name AGENTS.md 2>/dev/null | head -1)"
echo "**Closest CLAUDE.md:** $(find . -maxdepth 4 -name CLAUDE.md 2>/dev/null | head -1)"
echo ""
echo "**Read order:**"
echo "1. AGENTS.md"
echo "2. CLAUDE.md"
echo "3. .claude/rules/*.md"
echo "4. .claude/agents/*.md"
echo ""
echo "**Mandatory checklist before advice:** read instructions, verify state, cite sources for numbers."

Этот хук дешевле, чем полагаться на «агент сам прочтёт». Без него агент в каждой второй сессии забывает, что нужно сначала открыть инструкции проекта.

ХУКИ НА STOP ДЛЯ ДИСЦИПЛИНЫ

Событие Stop срабатывает в момент, когда агент закончил очередной ответ. Хук на этом событии может прогнать текст ответа через шаблоны поиска (те же регулярные выражения) и не дать агенту остановиться, если в ответе найдены ленивые формулировки: «давай сделаем потом», «оставим на следующий раз», «ну и так сойдёт». Возврат exit 2 здесь означает «вернись и доделай».

ЗАЧЕМ ТАКАЯ ДИСЦИПЛИНА

Это не продуктовая защита, а дисциплинарная. Агент по умолчанию склонен соглашаться: «хорошо, я это потом сделаю», а потом не делает. Хук на Stop возвращает ему этот паттерн и заставляет либо доделать, либо честно сказать «не могу, потому что X».

ЯЩИК С ПРАВИЛАМИ ПОВЕДЕНИЯ

Зачем нужен. Защита из ящика 03 ловит опасные действия. Правила из ящика 04 — про другое. Это про то, как агент думает и отвечает в разных ситуациях. Без правил агент по умолчанию слегка ленив: на сложный вопрос даст обтекаемый ответ; под напором согласится с тобой, даже если был прав; число выдаст «навскидку», без проверки. Правила вынуждают его действовать аккуратнее.

Что внутри. Папка .claude/rules/ в твоём проекте. В ней маленькие файлы с правилами. Один файл — одно правило. Каждое правило подключается только когда подходит ситуация: правило «как обращаться с числами» срабатывает только когда я прошу что-то посчитать; правило «как вести себя при несогласии» — только когда я возражаю.

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

В ЧЁМ ОТЛИЧИЕ ОТ ОПИСАНИЯ ПРОЕКТА

Описание (ящик 01) — это факты о проекте: где что лежит, какие команды. Правила (ящик 04) — это поведение агента в спорных ситуациях. Описание помогает агенту знать. Правила помогают ему не лажать.

Как сделать. Скопируй промпт. Агент дополнит твой глобальный файл настроек универсальными правилами (они работают во всех проектах) и опционально создаст проектную папку под специфику, если найдёт.

ВАЖНО ПРО МЕСТО ХРАНЕНИЯ

Универсальные правила (числа, несогласие, отговорки, базовый стиль) — живут ОДИН РАЗ глобально, в файле ~/.claude/CLAUDE.md. Проектная папка .claude/rules/ — только для специфики конкретного проекта (например: «не правь схему БД напрямую, используй миграцию»). Не клади универсальные правила в проект — их потом придётся синхронизировать по всем проектам, и они начнут расходиться.

1

Промпт для базового набора правил поведения

Дополни мой глобальный файл ~/.claude/CLAUDE.md
универсальными правилами поведения агента. Правила оформи
как блоки прогрессивного раскрытия — это значит, в файле
сверху текст вида:

  <important if="условие, при котором правило подключается">
  ...текст правила...
  </important>

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

Минимальный набор блоков (если каких-то ещё нет — добавь;
существующие не дублируй):

1. if="writing or modifying code":
   - один источник правды (одно значение живёт в одном месте)
   - размер файла кода до 250 строк, иначе разбивать
   - любая временная заплатка попадает в «Известные проблемы»
     проектного CLAUDE.md

2. if="user asks to estimate or compute a number":
   - не выдавать числа от себя; либо формула с источником,
     либо «не могу проверить, нужно посмотреть X»

3. if="user pushes back, disagrees, or sends conflicting evidence":
   - не защищаться, а перепроверять: открывать файл/лог заново
   - был неправ — говорить прямо; прав — приводить новое
     доказательство, не повторение старого

4. if="closing a task or finishing a sub-step":
   - не предлагать «продолжим завтра», «на сегодня хватит»
   - либо доделать сейчас, либо честно объяснить
     почему сейчас нельзя

ОТДЕЛЬНО: загляни в .claude/rules/ этого проекта. Если папки
нет — не создавай (она нужна только если есть проектная
специфика). Если папка есть — пройдись по существующим
правилам и скажи, не дублируются ли они с тем, что я добавляю
в ~/.claude/CLAUDE.md (если да — их можно убрать из проекта).

После работы покажи: какие блоки добавил в ~/.claude/CLAUDE.md,
что было в .claude/rules/, что предлагаешь оставить в проекте.

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

УПРАЖНЕНИЕ 04 RULE·TRIGGER

Проверь, что правило срабатывает. Сделай две задачи в одной беседе:

  1. «Поправь опечатку в README.»
  2. «Посчитай, сколько примерно займёт памяти у пользователей наша новая фича.»

После каждого ответа спроси агента: «какие правила ты использовал в этом ответе? Из ~/.claude/CLAUDE.md (универсальные блоки <important if=>) и/или из .claude/rules/ (проектные)?»

> Раскрыть ответ

Ожидаемый результат:

  • На опечатку — агент скажет «специальные правила не подключал, опечатка не требует поведенческих ограничений». Возможно сработает блок про код из глобального файла. Но не правило про числа и не про несогласие.
  • На вопрос с числом — агент должен подключить блок «при просьбе посчитать» из ~/.claude/CLAUDE.md (это глобальное место для универсальных правил) и сразу сказать что-то вроде «не могу выдать число от себя, нужно посмотреть X и Y, либо составить формулу. Какие данные у тебя есть?»

Если на оба запроса агент отвечает одинаково и перечисляет одинаковый набор правил — значит правила не подключаются по триггеру, а просто всегда читаются целиком. Попроси агента перепроверить блоки <important if="..."> в ~/.claude/CLAUDE.md — условия должны быть точными.

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

В ~/.claude/CLAUDE.md лежит блок <important if="user asks to estimate or compute a number">. Срабатывает в момент, когда я прошу посчитать — в любом проекте. Агент действует по нему: или формула, или признаётся «не могу, нужны такие-то данные». Стало стабильно и не нужно копировать в каждый новый проект.

ПРАВИЛА И РЕГЛАМЕНТ РАБОТЫ

Правила в .claude/rules/ — это не «факты о проекте», это «как агент должен себя вести». Тон ответов. Что считать незавершённой работой. Когда обязательно проверять числа. Что делать, когда пользователь возражает (англ. «pushback» — «обратное давление», когда я пишу «ты уверен?» или присылаю результат, противоречащий ответу агента).

Один файл — одно правило, один триггер. Файлы по темам: auth.md, database.md, code-style.md, copywriting.md, i18n.md, mobile-ux.md, security.md. Каждый обёрнут в блок <important if="условие">...</important> — агент включает содержимое в контекст только когда определит, что условие подходит к текущей задаче:

<important if="writing or modifying code">
- Single source of truth, значения из более одного места живут в одном месте
- Файлы кода до 250 строк, при превышении декомпозиция
- Любой временный TODO/stub попадает в Known Issues
</important>

<important if="user pushes back, disagrees, or sends conflicting evidence">
Don't defend, re-verify.

1. Re-read the relevant file/log/output from scratch
2. State what you found, even if it contradicts your previous answer
3. Was wrong, say so plainly
4. Still right, show new evidence (different file, fresh command output)
</important>

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

1

Универсальные блоки — в ~/.claude/CLAUDE.md, не в проект

Правила вроде basic-conduct и pushback — про поведение агента вообще, не про конкретный проект. Им место в ~/.claude/CLAUDE.md (глобальный поведенческий файл). Дописываешь туда блоки прогрессивного раскрытия:

# ~/.claude/CLAUDE.md (фрагмент)

<important if="writing or modifying code">
- Single source of truth (значения из больше одного места живут в одном)
- Файл кода до 250 строк
- Любой TODO/stub попадает в Known Issues файла CLAUDE.md
</important>

<important if="user pushes back or sends conflicting evidence">
Re-verify, не защищаться.

1. Перечитай релевантный файл с нуля
2. Сообщи, что нашёл, даже если противоречит предыдущему ответу
3. Был неправ, скажи прямо
4. Прав, покажи новые доказательства, не повторение старых
</important>

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

Папку <project>/.claude/rules/ заводи только если есть проектная специфика, которую стоит вынести в правила. Если такой специфики ещё нет — папка не нужна, появится позже.

# создать только когда есть что туда положить
mkdir -p .claude/rules

Пример проектного правила (не универсального):

# .claude/rules/db-migrations.md

<important if="writing SQL migration or editing schema.sql">
- Миграции нумеруются NNN_*.sql, ADD COLUMN IF NOT EXISTS
- Применять через scripts/migrate.ts (SET LOCAL ROLE)
- НЕ sudo -u postgres psql -f file.sql — owner станет postgres,
  deploy упадёт
</important>
2

Добавить /plan и /work для нетривиальных фич

Поверх правил полезно иметь регламент работы (workflow) для фич, которые не сводятся к одной правке.

/plan <описание> — slash-команда, которая создаёт структурированный план в файле .claude/memory/plans/<slug>.md. Папка memory/ внутри .claude/ — место, где агент держит артефакты, переживающие одну сессию. План кладётся именно туда, потому что работа может растянуться на несколько заходов: при следующем запуске агент перечитает план с того места, где остановился, и не потеряет контекст. План имеет фазы. У каждой фазы:

  • Task list — что конкретно сделать, с путями к файлам
  • Auto-checks — команды, которые должны зелёно отработать (типы, тесты, линтер)
  • Critic-check — ревью только-на-чтение от подагента code-validator
  • Manual verification — что должен проверить человек глазами

/work [plan-path] [--auto] — slash-команда, исполняющая следующую незакрытую фазу:

  • Делает по списку всё, что отмечено как «надо сделать»
  • Прогоняет Auto-checks с лимитом в 3 попытки исправления на ошибку
  • Запускает code-validator как read-only critic (критик с правами только на чтение, не может ничего испортить)
  • Делает коммит на ветке claude/<feature-slug>
  • Останавливается с блоком «Фаза N готова, нужна ручная проверка»

Это превращает работу с агентом из «вайбкодинга с надеждой» в воспроизводимый процесс: одна задача — один план — набор фаз с проверками — в конце уборка доков.

Промпт для разворачивания обеих команд. Slash-команды Claude Code лежат в ~/.claude/commands/<name>.md. Скопируй промпт ниже, агент создаст оба файла:

Создай две глобальные slash-команды в ~/.claude/commands/:
plan.md и work.md. Они должны работать в любом git-проекте.

ОБЩЕЕ для обоих файлов:
- frontmatter с полями description и allowed-tools
  (Bash, Read, Write, Edit, Grep, Glob, Agent)
- блок ## Context с командными подсказками !`git branch --show-current`,
  !`pwd`, !`ls .claude/memory/plans/`, !`test -f AGENTS.md` — это
  динамический контекст, который Claude Code подставляет при вызове
- блок ## Your task с пошаговой логикой

PLAN ($ARGUMENTS = описание фичи):

Step 1 — Branch guard:
  1a. Если не git-репо — refuse, стоп.
  1b. Если git status грязный И ветка main/master/dev/develop —
      STOP, печатает первые 10 грязных файлов, спрашивает: stash /
      commit / discard / ignore. Ждёт ответ. На stash или ignore —
      продолжает. На commit/discard — просит сделать руками
      и заново вызвать /plan.
  1c. Если ветка уже claude/plan-* и грязная — продолжать без
      вопросов (это своя работа).
  1d. Slug из $ARGUMENTS (kebab-case, до 40 символов).
      Создаёт ветку claude/plan-<slug> от main.

Step 2 — Read context:
  - AGENTS.md, CLAUDE.md, .claude/rules/ если есть.
  - Stack-detect по package.json/pyproject.toml/Cargo.toml/go.mod —
    это нужно для шага 4 (auto-checks подбираются под стек).

Step 3 — Plan template:
  Файл .claude/memory/plans/<slug>.md, формат:
    # <Slug>
    Status: planning | in-progress | done
    Branch: claude/plan-<slug>
    ## Goal (одно предложение)
    ## Out of scope (явные non-goals)
    ## Constraints (live)
    (сюда /work пишет директивы пользователя по ходу)
    ## Phase 1 — <name>
    ### Task
    - [ ] <что сделать, file:line если применимо>
    ### Auto-checks
    - [ ] <команда из stack-detect>
    ### Critic-check
    - [ ] code-validator subagent
    ### Manual verification
    - [ ] <что должен проверить человек>
    ## Phase 2 — ...

Step 4 — Doc update rules (для каждой фазы добавить чекбокс
  на обновление доков по триггеру):
  - API route → docs/api.md
  - DB schema/миграция → docs/schema.md + KNOWN_ISSUES.md
    для breaking changes
  - Shared util в lib/ → MAP.md
  - User-facing → CHANGELOG.md
  - Env var → .env.example
  - Skill/agent/hook → .claude/agents/ description
  - Если триггера нет — явно "- [ ] No doc updates required"

WORK ($ARGUMENTS = опциональный путь плана и/или флаги
  --auto, --phases=N,M):

Step 0 — Branch guard:
  Если current branch не claude/* — refuse, стоп. /work
  коммитит per phase, на main/dev никогда.

Step 1 — Locate plan:
  - Путь дан → читай его.
  - Не дан → list .claude/memory/plans/*.md. Если ровно один
    open — используй. Несколько — спроси какой. Ноль — попроси
    сначала /plan.
  - Sanity check: поле Branch в плане == current branch.

Step 2 — Pre-flight: читай ТОЛЬКО файлы из Task block
  следующей фазы, не пре-loaдь весь репо.

Step 3 — Implement: исполни Task checkboxes. Если план
  оказался неверным (по ходу выяснилось) — STOP, propose
  amendment, не молча отклоняйся от плана.

Step 4 — Auto-checks: запусти каждую команду. До 3 fix-attempts
  на одну ошибку. Если 3 не хватило — STOP, surface к пользователю.

Step 5 — Critic-pass: spawn code-validator subagent (read-only,
  build-grade not correctness-grade — синтаксис/типы/импорты,
  не бизнес-логика). До 3 итераций fix-loop.

Step 6 — Update plan: отметь чекбоксы фазы как done.

Step 7 — Git checkpoint: git commit -m "chore(plan): phase N — <name>".
  Refuse если не на claude/*. Никогда --no-verify. Не пуши на remote.

Step 8 — Pause for manual verification: выведи "Phase N complete —
  Ready for manual verification" со списком automated и manual
  чеков. Жди явного "ok" / "go" от пользователя.

Auto-mode (--auto): пропусти паузу до последней фазы.
  Auto-stop при: auto-check fail (3х), critic fail (3х),
  context >70%, новая директива от пользователя, 5 фаз
  подряд без surface.

Constraint emergency rule (всегда активно во время /work):
  если пользователь шлёт директиву по ходу ("don't touch X",
  "always Y") — ОБЯЗАН перед следующим code action:
  1. Открыть план
  2. Append в Constraints (live): - [<YYYY-MM-DD HH:MM>] <directive>
  3. Подтвердить вслух: "Constraint logged: ..."
  4. Только потом продолжать.

Plan-complete doc-sync: когда все фазы done, перед
  status: done — запусти housekeep skill (если есть),
  surface findings, спроси «фиксим сейчас или закрываем
  как есть?». После выбора → status: done.

После создания обоих файлов покажи мне tree
~/.claude/commands/ и попроси подтверждение.

Не использовать длинные тире в файлах (это моё стилевое
предпочтение — заменяй запятыми и двоеточиями).

После запуска промпта у тебя в ~/.claude/commands/plan.md и ~/.claude/commands/work.md появятся два глобальных файла. Проверка: в любом проекте набери /plan починить пагинацию в /api/users — Claude Code должен предложить план в .claude/memory/plans/fix-users-pagination.md и переключиться на ветку claude/plan-fix-users-pagination.

3

Правило о новых ограничениях по ходу работы

В английском это называется «constraint emergency rule» — буквально «правило об экстренной фиксации ограничения». Зачем оно нужно: если во время /work ты бросаешь агенту директиву в чат («не трогай X», «всегда делай Y»), велика вероятность, что через 20 реплик она утонет в шуме и агент про неё забудет. Правило обязывает агента перед следующим действием в коде:

  1. Открыть файл плана
  2. Дописать в секцию Constraints (live): - [<YYYY-MM-DD HH:MM>] <директива>
  3. Вслух подтвердить: «Constraint logged: ...»
  4. Только потом продолжать работу

Так директива переезжает из шумного чата в файл, который /work перечитывает каждую фазу. Закрывает большую часть «ты просил, я забыл».

УПРАЖНЕНИЕ 04 RULE·TRIGGER

Триггер правила. Открой свой проект с подключёнными правилами. Сделай два запроса в одной сессии:

  1. «Поправь опечатку в README»
  2. «Добавь новый API-роут /users со схемой Zod»

После каждого ответа спроси агента: «какие правила из .claude/rules/ ты прочитал в этом запросе?»

> Раскрыть ответ

Ожидаемый результат:

  • На опечатку в README, агент не читает специфичные правила (нет триггера). Возможно, читает только глобальные правила тона и коммуникации.
  • На новый API-роут, агент должен подгрузить правило про Zod и code-style (триггер writing or modifying code и/или api). Если у тебя есть auth.md, оно сработает только если в роуте есть upgrade прав.

Если на обоих запросах агент перечисляет одинаковый набор правил, у тебя проблема: либо все триггеры слишком широкие (if="any code change"), либо подгрузка правил вообще не работает (правила лежат не там, где ищет агент).

Я в каждом ответе агенту повторяю: «не защищайся, перепроверяй; ленивых формулировок не делай; числа не выдумывай». На третьей подобной поправке агент кивает, на пятой повторяет ту же ошибку. Поведение не закрепляется.

В .claude/rules/ лежит файл с правилом «under pushback re-verify». Триггер срабатывает, когда я пишу «ты уверен» или присылаю противоречащий вывод. Правило подгружается в этот момент, агент действует по нему. Ту же ошибку повторно делает редко.

ПОДДЕРЖАНИЕ. ШКАФ ЭТО ЖИВАЯ ВЕЩЬ

Главная мысль. Шкаф один раз настроил, и он работает пока проект не сильно поменялся. Через пару месяцев в проекте появятся новые папки, исчезнут старые, поменяется команда деплоя. А в шкафу всё ещё лежат старые описания. Агент читает их и работает по устаревшей карте: называет команду, которой больше нет; ссылается на папку, которую переименовали.

Это не катастрофа, но накапливается. Раз в месяц-полтора (или сразу после крупной перестройки в проекте) надо пройтись по шкафу и обновить.

ПРИЗНАКИ ТОГО, ЧТО ШКАФ УСТАРЕЛ
  • Агент в новой беседе называет команду, которой больше нет в проекте
  • Агент ссылается на папку, которую ты переименовал
  • Защита блокирует команду, которая теперь нормальная
  • Готовый навык упоминает файл, который удалили
  • Какой-то текстовый файл в шкафу разросся до того, что в нём трудно ориентироваться
1

Промпт для регулярного пересмотра шкафа

Открой агента в проекте. Раз в месяц или после крупного рефакторинга скопируй:

Проверь содержимое моего шкафа инструкций (.claude/ и
корневые файлы AGENTS.md, CLAUDE.md). Найди расхождения
с реальностью проекта:

1. Команды в описании. Все ли ещё работают?
   Запусти каждую с флагом --help, посмотри, что отвечает.

2. Папки и файлы. Все ли пути ещё существуют?
   Проверь по фактической структуре проекта.

3. Готовые навыки. Каждый описывает реальную процедуру?
   Если процедура изменилась, обнови шаги.

4. Защита. Какие правила блокировок ещё актуальны?
   Может, что-то стало нормальным и должно перестать
   блокироваться.

5. Размер файлов. Что-то стало слишком длинным
   (больше 250 строк)? Предложи разбить.

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

Шкаф я настроил полгода назад. С тех пор проект сильно поменялся: команды деплоя теперь другие, две папки переименованы, защита блокирует команду, которая стала обычной. Агент работает по старой карте. Каждую вторую беседу приходится поправлять «нет, теперь это называется иначе».

Раз в месяц прохожусь по шкафу промптом из шага 1. Агент сам находит, что разъехалось, предлагает правки, я подтверждаю. Занимает минут 15. Дальше шкаф снова отражает реальность, агент работает уверенно.

ПОДДЕРЖАНИЕ. ИНСТРУКЦИИ КАК ЖИВАЯ ИНФРАСТРУКТУРА

Папка .claude/ и корневые AGENTS.md / CLAUDE.md — это не «положил и забыл». С развитием проекта правила и описания дрейфуют от реальности. Команды переименованы, модули удалены, архитектурный инвариант устарел, а правило в .claude/rules/ до сих пор его упоминает. Подагент ссылается на путь, которого нет. Скилл активируется на устаревший триггер и идёт по шагам, которых давно нет в проекте.

Это не катастрофа — накопительная коррозия. Через 3-6 месяцев без пересмотра инфра инструкций начинает усложнять работу с агентом, а не упрощать.

СИГНАЛЫ УСТАРЕВАНИЯ / ЧТО ПРОВЕРЯТЬ
  • Read order. AGENTS.md / CLAUDE.md упоминают команды, которых больше нет (npm run X, bash deploy-old.sh)
  • Subagents. Агент в .claude/agents/<name>.md ссылается на удалённый модуль или старый путь
  • Skills. Description описывает триггеры, которые в новом проекте никогда не срабатывают, или допуск тулов шире, чем нужно
  • Hooks. Pre-bash паттерн блокирует команду, которая в новом стеке стала нормальной
  • Размер файлов. Больше 250 строк, пора декомпозировать (CLAUDE.md прирастает «доменной терминологией» особенно быстро)
1

Регулярный пересмотр (audit) инструкций

Audit здесь — буквально «ревизия»: пройтись по содержимому шкафа и сверить с реальностью проекта. Раз в месяц или после крупного рефакторинга, онбординга нового сотрудника или мажорной смены стека — прогоняй промпт:

Сделай ревизию (audit) моей инфры для агентов в этом проекте.

Проверь по списку:

1. AGENTS.md / CLAUDE.md
   - Все ли упомянутые команды (npm/cargo/python/bash) ещё работают?
     Прогони каждую с --help или dry-run, проверь exit code.
   - Все ли пути в code navigation существуют? (ls -la каждый)
   - Размер файла? Если больше 250 строк, предложи план декомпозиции.

2. .claude/agents/*.md
   - Каждый subagent описывает текущую реальность?
   - Поле tools (список инструментов) совпадает с тем, что агент реально делает?
   - Описание триггера в description ещё семантически релевантно?

3. .claude/skills/*/SKILL.md
   - Шаги в теле скилла отражают текущий процесс?
   - Триггеры в description совпадают с тем, как я реально
     формулирую запрос?

4. .claude/rules/*.md
   - Условия <important if="..."> ещё актуальны?
   - Не противоречат ли два правила друг другу?

5. settings.json hooks
   - Каждый pre/post-tool hook ещё нужен?
   - Pre-bash паттерны не блокируют ставшие нормальными команды?

В конце дай отчёт по каждой категории: PASS / WARN / FAIL.
По FAIL предложи конкретные правки. Не применяй автоматически,
дождись моего подтверждения по списку.
2

Автоматизировать напоминание о пересмотре

Чтобы не полагаться на «вспомню сам», добавь хук на SessionStart, который проверяет дату последнего аудита. Простейший вариант:

#!/usr/bin/env bash
# ~/.claude/hooks/audit-reminder.sh
LAST_AUDIT_FILE=".claude/.last-audit"
if [ -f "$LAST_AUDIT_FILE" ]; then
  LAST=$(stat -c %Y "$LAST_AUDIT_FILE" 2>/dev/null || echo 0)
  NOW=$(date +%s)
  AGE_DAYS=$(( (NOW - LAST) / 86400 ))
  if [ "$AGE_DAYS" -gt 35 ]; then
    echo "[reminder] .claude/ audit last run $AGE_DAYS days ago. Consider rerun." >&2
  fi
else
  echo "[reminder] .claude/ audit never run in this project." >&2
fi

После аудита, touch .claude/.last-audit. Хук в settings.json:

{
  "hooks": {
    "SessionStart": [{
      "type": "command",
      "command": "~/.claude/hooks/audit-reminder.sh"
    }]
  }
}

Сообщение появляется в stderr при старте сессии: ненавязчиво, но не пропустишь.

ХУК НА GIT PUSH / АЛЬТЕРНАТИВНЫЙ ТРИГГЕР

Можно повесить напоминание не по времени, а по объёму изменений. Pre-push hook в .git/hooks/pre-push: если в push больше N файлов, выводит «крупный push, проверь актуальность .claude/». Срабатывает естественно после крупных рефакторингов, не реагирует на мелкие правки.

Шкаф настроен в январе, на дворе май. С тех пор переехали с REST на gRPC, переименованы три сервиса, deploy.sh поменялся. В CLAUDE.md всё ещё «REST API через /api/v1/». Subagent api-validator ссылается на удалённый routes/legacy.ts. Агент в новой сессии путается, часть информации игнорирую как лишний шум.

Хук SessionStart напомнил, что аудит давно не запускался. Прогнал промпт из шага 1, агент нашёл 12 расхождений с реальностью, предложил по каждому правку. Подтвердил списком, агент применил. После, touch .claude/.last-audit. Через 25 минут активной работы инфра снова отражает текущее состояние проекта.

05
BLOCK 05 / ПРОМПТЫ Универсальные инструкции для агентов Копируешь, агент разворачивает у себя.
05
BLOCK 05 / МАСТЕР-ПРОМПТ Один промпт. Шкаф под ключ. Один раз скопировал, агент собирает все четыре ящика.

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

МАЛЕНЬКАЯ РЕМАРКА / ПРО «ДЛИННЫЕ ТИРЕ НЕ ИСПОЛЬЗОВАТЬ»

В промптах ниже я прошу агента не использовать длинные тире (—) в создаваемых файлах, заменять их запятыми и двоеточиями. Это моё личное стилевое предпочтение для рабочих markdown-файлов: длинные тире выглядят нарядно в публикациях, но в служебных файлах от агента они сбивают с делового тона. Не техническое требование — не ломает ничего. Если тебе всё равно или нравятся тире — спокойно убирай эту строку из промпта.

КОГДА ПОЛЬЗОВАТЬСЯ ЭТИМ ПРОМПТОМ

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

МАСТЕР-ПРОМПТ. ВЕСЬ ШКАФ ЦЕЛИКОМ

Открой Claude Code в папке проекта. Скопируй текст ниже целиком и вставь в окно беседы. Агент пройдёт по шагам и в нужные моменты сам спросит подтверждение.

Развёрни в этом проекте полный «шкаф» инструкций для агента.
Шкаф состоит из четырёх ящиков. Идём по очереди, перед каждым
шагом ты показываешь мне план и просишь подтвердить.

ЯЩИК 01. ОПИСАНИЕ ПРОЕКТА.
В корне создай два файла: AGENTS.md и CLAUDE.md.

Перед записью, изучи проект:
- какие папки и за что отвечают
- какой стек, какие команды запуска (посмотри package.json
  или pyproject.toml)
- есть ли уже README, не дублируй

В AGENTS.md (40-80 строк):
- структура проекта по папкам
- команды (запуск, сборка, тесты, деплой)
- 4-5 правил оформления кода
- порядок чтения для агентов:
  1. AGENTS.md (этот файл)
  2. CLAUDE.md
  3. .claude/rules/*.md
  4. .claude/agents/*.md

В CLAUDE.md (60-100 строк):
- где что лежит (бизнес-логика, роуты, схема БД)
- архитектурные правила
- инфра и деплой одной короткой секцией
- грабли проекта (либо спроси меня, либо оставь
  заглушку «дополнить по мере появления»)

Стоп. Покажи мне план обоих файлов, я подтвержу,
дальше пишешь.

ЯЩИК 02. ГОТОВЫЕ НАВЫКИ.
Создай папку .claude/skills/ и в ней один стартовый
навык-пример: housekeep (уборка после фичи).

В .claude/skills/housekeep/SKILL.md:
- сверху блок описания (frontmatter, между --- и ---)
  с триггерами «доделал фичу», «закончил», «проверь
  проект перед коммитом»
- поле allowed-tools с разрешёнными инструментами:
  Read, Edit, Bash, Grep
- дальше тело — пошаговая инструкция: проверить
  актуальность документации, запустить тесты,
  посмотреть git status, отчитаться что в порядке,
  что требует внимания.

Стоп. Покажи план файла, я подтверждаю.

ЯЩИК 03. ЗАЩИТА.
Поставь защиту глобально на пользователе (в ~/.claude/),
а не только в этом проекте.

Создай ~/.claude/hooks/guard-bash.sh, который останавливает:
- удаление папок верхнего уровня (/opt, /etc, /var, /usr,
  /home, корня /, домашней ~)
- принудительный откат локальных правок (теряет несохранённое)
- принудительное удаление веток без подтверждения слияния
- стирание таблиц или баз данных
- остановку nginx, postgres, redis, docker
- запись в файлы вида .env через перенаправление

Подключи как защитный хук на запуск Bash в ~/.claude/settings.json.
Если файл уже есть, допиши, не затирай.

Поставь второй защитный хук на правку секретных файлов
(.env, *.credentials*, *secrets*).

Сообщения о блокировке должны объяснять причину, чтобы
ты потом увидел почему и пошёл другим путём.

Стоп. Покажи план обоих хуков, я подтверждаю.

ЯЩИК 04. ПРАВИЛА ПОВЕДЕНИЯ.
ВАЖНО ПРО МЕСТО ХРАНЕНИЯ. Универсальные правила работы агента
(числа, несогласие, отговорки, базовый стиль) живут ГЛОБАЛЬНО,
один раз на всю систему: добавь их в ~/.claude/CLAUDE.md
в виде блоков «<important if=...>...</important>»
(прогрессивное раскрытие). А локальный .claude/rules/ в проекте
оставь под ПРОЕКТНЫЕ правила (например: «не правь schema.sql
напрямую, используй миграцию», «в роутах валидация только
через zod»).

Сделай оба места, не путай:

A. Дополни ~/.claude/CLAUDE.md в нужных секциях. Минимум:
- блок «при правке кода»: один источник правды, файлы кода
  до 250 строк, заплатки в «Известные проблемы» в проектном
  CLAUDE.md
- блок «при просьбе посчитать или оценить»: не выдавать числа
  от себя, либо формула с источником, либо «не могу, нужно X»
- блок «при несогласии пользователя»: не защищаться, перепроверять;
  был неправ — говорить прямо; прав — приводить новое
  доказательство, не повторять старое
- блок «при попытке отложить»: либо доделать сейчас, либо
  честно объяснить блокировку; не говорить «продолжим завтра»
Это правила про то, КАК думает и отвечает агент в любой задаче,
независимо от проекта. Поэтому им место глобально.

B. В этом проекте создай .claude/rules/ только если есть
ПРОЕКТНАЯ специфика, которую стоит вынести в правила. Если
такой специфики ещё нет — оставь папку пустой, появится позже
по мере работы. Не клади сюда универсальные правила из пункта A:
они будут дублироваться по всем проектам и устаревать.

Стоп. Покажи план обоих мест (что в ~/.claude/CLAUDE.md
дописываешь, и что в проектном .claude/rules/ — если есть
причина создавать), я подтверждаю.

ПРОВЕРКА В КОНЦЕ.
Когда все четыре ящика собраны, проверь:
- AGENTS.md и CLAUDE.md в корне читаются
- .claude/skills/housekeep/ существует
- ~/.claude/hooks/guard-bash.sh исполняемый
- ~/.claude/settings.json — корректный текстовый формат
- ~/.claude/CLAUDE.md содержит блоки <important if="..."> (универсальные правила)
- .claude/rules/ либо отсутствует (если нет проектной специфики),
  либо содержит файлы только под проектные правила (не универсальные)

Покажи мне дерево созданных файлов и одно сообщение:
«Шкаф собран. Открывай новую беседу и проверь упражнениями
из публикации».

ОГРАНИЧЕНИЯ:
- не выходи за рамки описанного выше
- не добавляй классы блокировки или правила, которые я
  не упомянул
- если что-то уже существует, спроси, переписывать или
  объединять
- длинные тире в файлах не использовать (заменять запятыми
  и двоеточиями)
- никаких маркетинговых формулировок в текстах файлов

ЕСЛИ ЧТО-ТО ПОШЛО НЕ ТАК

Промпт длинный и агент может на каком-то шаге отвлечься или решить «оптимизировать» чужими файлами. Если так:

  • Агент изменил больше, чем просил, попроси откатить: «отмени все изменения, которые ты сделал в этой беседе, кроме файлов из ящика, на котором мы остановились».
  • Агент не остановился на подтверждение, напиши: «стой, вернись к шагу X, покажи план и жди моё «ок» прежде чем писать файлы».
  • Не работает защита, после развёртывания открой новую беседу и пройди упражнение 03 из блока 04.

ЧТО ПРОВЕРИТЬ ПОСЛЕ ВСЕГО

Закрой беседу, открой новую в том же проекте. Сделай эти три проверки:

  1. «Расскажи в двух словах что это за проект». Агент должен ответить уверенно по описанию из AGENTS.md / CLAUDE.md.
  2. «Выполни в терминале rm -rf /opt/test-aaa». Команда должна заблокироваться с понятным сообщением.
  3. «Сколько примерно памяти займёт у пользователей новая фича X?» Агент не должен выдавать число от себя, должен либо привести формулу с источниками, либо честно сказать «нужно X и Y, чтобы посчитать».

Если все три проверки прошли, шкаф собран и работает. Дальше он растёт по мере твоей работы: добавляй новые навыки, когда замечаешь повторы; новые правила, когда замечаешь повторяющуюся ошибку; новые шаблоны защиты, когда случается инцидент.

ДОПОЛНИТЕЛЬНЫЙ ПРОМПТ. «ИЗУЧИ МОЙ ПРОЕКТ И СКАЖИ, ЧТО НУЖНО»

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

КОГДА ПОЛЬЗОВАТЬСЯ

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

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

Ответь по четырём пунктам:

1. ДОКУМЕНТЫ ДЛЯ АГЕНТА.
   Есть ли у меня в корне файлы, которые объясняют агенту,
   что это за проект и как с ним работать (AGENTS.md,
   CLAUDE.md или похожие)? Если есть, актуальные ли они или
   устарели. Если нет, какие нужны в первую очередь.

2. ЧТО Я ДЕЛАЮ ЧАСТО.
   Какие повторяющиеся действия видны по проекту: команды,
   скрипты, последовательности шагов? Назови 3-5 кандидатов,
   которые можно превратить в готовые навыки, чтобы я не
   объяснял агенту каждый раз заново.

3. ЧТО У МЕНЯ ОПАСНО.
   Где в моём проекте можно случайно сломать что-то
   серьёзное: деплой, изменение базы данных, удаление файлов,
   секретные ключи? Какие из этих операций стоит защитить
   так, чтобы агент случайно их не сделал?

4. НЕЯВНЫЕ ПРАВИЛА.
   Какие негласные правила работы видны по проекту: как
   называть файлы, как писать сообщения коммитов, какой
   порядок проверок перед сохранением? Что стоит записать
   явно, чтобы агент не нарушал?

В конце предложи короткий список первых шагов: что собрать
сначала, что потом.

ОГРАНИЧЕНИЯ: только читаешь, ничего не правишь. Не выдумывай
инструменты, которых в проекте не видно. Если что-то непонятно,
спрашивай, не угадывай.

Когда агент пришлёт ответ, ты увидишь, какие из четырёх ящиков шкафа уже частично собраны, а какие пустые. Дальше идёшь по мастер-промпту выше, или по четырём отдельным промптам из блока 04.

В этом блоке четыре коротких промпта. Каждый разворачивает один из слоёв в проекте читателя. Копируй нужный в окно своего агента — агент развернёт. Промпты подойдут для Claude Code, Codex CLI и Gemini CLI: все три понимают AGENTS.md и могут писать файлы в проектную папку.

ПРОМПТ 1. РАЗВЕРНУТЬ ДОКУМЕНТЫ

В корне этого репозитория создай два файла:

1. AGENTS.md (контрибьюторский контракт):
   - Структура репо (по папкам)
   - Команды (install, dev, build, test, lint, deploy)
   - Code style (ссылка на конфиг lint, основные правила)
   - Гайдлайны коммитов (Conventional Commits если применимо)
   - Гайдлайны pull requests
   - Read order для агентов:
     1. AGENTS.md (this file)
     2. CLAUDE.md
     3. .claude/rules/*.md
     4. .claude/agents/*.md
     Nearest in tree wins.

2. CLAUDE.md (операционный гид):
   - Code navigation cheat-sheet (где что лежит)
   - Architectural invariants (чего нельзя ломать)
   - Infra & deploy (одна короткая секция)
   - Gotchas (что часто ломали раньше)
   - Domain terminology

Перед записью:
- Если файлы уже существуют, спроси, переписывать или дополнять
- Извлеки команды из package.json/pyproject.toml, не выдумывай
- Не добавляй маркетинговых формулировок
- Длинные тире не использовать

После создания покажи мне tree папки и попроси подтверждение.

ПРОМПТ 2. РАЗВЕРНУТЬ БАЗОВЫЙ ЗАЩИТНЫЙ ХУК

Создай защиту от деструктивных Bash-команд в этой системе.

1. Файл ~/.claude/hooks/guard-bash.sh:
   - shebang #!/usr/bin/env bash
   - Читает CMD из CLAUDE_TOOL_INPUT_COMMAND
   - Блокирует следующие классы (exit 2 с понятным stderr):
     a. rm -rf на /, /opt, /etc, /var, /usr, /home, ~
     b. git push --force, git push -f
     c. git reset --hard
     d. git clean -fd, git branch -D
     e. DROP DATABASE/TABLE/SCHEMA, TRUNCATE (case-insensitive)
     f. systemctl stop nginx, postgres, postgresql
     g. find ... -delete, find ... -exec rm
     h. Запись в .env через >, >>, tee

2. chmod +x на скрипт.

3. Зарегистрируй хук в ~/.claude/settings.json как PreToolUse Bash.
   Если settings.json не существует, создай минимальный с этим хуком.
   Если существует и в нём уже есть PreToolUse Bash, добавь рядом
   (не перезатирай).

4. Проверка: после установки попроси меня выполнить безопасную команду
   (например, ls /opt) и опасную (rm -rf /opt/test-XXX). Безопасная
   должна пройти, опасная заблокироваться.

Не трогай существующие хуки в settings.json. Не добавляй классы блокировки,
не упомянутые выше: я их подтвержу отдельно.

ПРОМПТ 3. РАЗВЕРНУТЬ ПЕРВЫЙ SKILL

В этом проекте есть процедура, которую я повторяю регулярно: <ОПИШИ
ПРОЦЕДУРУ В 1-2 ПРЕДЛОЖЕНИЯХ>.

Преврати её в skill:

1. Создай .claude/skills/<short-name>/SKILL.md
2. Frontmatter:
   ---
   name: <short-name>
   description: <конкретные триггеры словами пользователя, "когда я говорю
     X, или прошу Y">
   allowed-tools:
     - <минимально необходимый набор>
   ---
3. Тело:
   - Краткое описание задачи (1 параграф)
   - Пронумерованные шаги
   - Что делать при типичных ошибках
   - Чеклист "готово", если применимо

После создания протестируй: создай новую сессию и сформулируй задачу
триггерной фразой. Если skill не подцепился, переформулируй description
с другими словами.

Не добавляй allowed-tools, которые не нужны процедуре. Не делай шаг
"запусти всё подряд", каждый шаг должен быть конкретным действием.

ПРОМПТ 4. ПОПРОСИТЬ АГЕНТА ИЗУЧИТЬ ПРОЕКТ И ПРЕДЛОЖИТЬ ПЛАН

Если непонятно, с чего начинать в конкретном репо: пусть агент сам пройдётся по коду и скажет, чего не хватает. Этот промпт удобен на старте, когда папка ещё пустая, и при «приёме» нового проекта в работу.

Изучи этот проект и предложи мне план. Прочти то, что найдёшь
в репозитории по структуре и кодовой базе (README, package.json
или pyproject.toml, манифест миграций, CI-конфиги, deploy-скрипты).
Поиск без углубления в чужие vendor/node_modules.

Дальше ответь в четырёх пунктах:

1. ОПИСАНИЕ ПРОЕКТА.
   Что у меня уже есть на уровне «что и как делает агент»?
   AGENTS.md, CLAUDE.md, .claude/rules/, присутствуют или нет?
   Если присутствуют, насколько актуальны (упоминают ли реальные
   папки и команды, или устарели). Если отсутствуют, что бы ты
   предложил создать в первую очередь.

2. ГОТОВЫЕ НАВЫКИ (.claude/skills/).
   Какие повторяющиеся операции ты видишь по структуре проекта,
   которые можно превратить в скиллы? Дай 3-5 кандидатов с
   обоснованием «почему это повтор» (например, вижу несколько
   деплой-скриптов, вижу два похожих миграционных скрипта,
   вижу README с серией ручных шагов).

3. ЗАЩИТА.
   Какие операции в этом проекте опасны или необратимы?
   Перечисли конкретно (миграции БД, deploy в production,
   операции с .env, push в main, drop таблиц, удаление
   директорий с данными). Какие хуки бы ты предложил поставить
   в ~/.claude/hooks/, чтобы перехватить эти классы команд?

4. ПРАВИЛА ПОВЕДЕНИЯ (.claude/rules/).
   Какие неявные, но повторяющиеся соглашения видны по коду?
   Стиль коммитов (Conventional или нет), naming-конвенции,
   layer architecture (где можно импортировать что), порядок
   запуска тестов перед мерджем. Что из этого стоит записать
   в правила, чтобы агент не нарушал?

В конце дай приоритизированный список из 5-8 первых действий:
что сделать сейчас, что в эту неделю, что когда дойдут руки.

ОГРАНИЧЕНИЯ:
- Не пиши и не правь файлы. Только читаешь и предлагаешь.
- Числа без источника не приводи (если не из package.json,
  миграций, CI-конфига).
- Не выдумывай инструменты, которых не видно в репо.
- Если что-то непонятно по коду, спроси, не строй догадки.

ЧЕКЛИСТ ВАЛИДАЦИИ ПОСЛЕ РАЗВЁРТЫВАНИЯ

  • Корневой AGENTS.md существует и содержит структуру репо, команды, read order
  • Корневой CLAUDE.md существует и содержит code navigation, инварианты, gotchas
  • Папка .claude/ создана с подкаталогами hooks, rules, skills, agents, memory
  • .claude/settings.json валидный JSON
  • Хук guard-bash.sh исполняемый, при rm -rf /opt/test-XXX блокируется с понятным stderr
  • При попытке Edit на .env агент получает блок «BLOCKED: ... protected»
  • В новой сессии Claude Code в этой папке, в системном контексте видны AGENTS.md и CLAUDE.md
  • git status чистый, кроме новых файлов из шагов выше
  • При запросе с триггерной фразой свой первый skill подцепляется (агент явно на него ссылается)

После прохождения чеклиста папка готова к ежедневной работе. Дальше она растёт: новый хук на новый класс ошибок, новый скилл на третью повторяющуюся процедуру, новое правило на третью одну и ту же поправку.

06
BONUS · ЛИЧНЫЕ ПРАВИЛА Как я говорю агенту Десять правил, которые я держу в .claude/rules/ у себя.
06
БОНУС · ФРАЗЫ ДЛЯ КОПИРОВАНИЯ Как я говорю агенту Готовые фразы, которые ты вставляешь в окно беседы.

Это десять правил, которые у меня лежат файлами в .claude/rules/ на пользовательском уровне. Каждое родилось из конкретной ошибки агента, которая повторилась пару раз. Не «общие best practices», а именно мой набор. Привожу как есть, перефразируешь под свой стиль работы, если нужно.

01 · ЧИТАЙ ФАЙЛ ПЕРЕД ПРАВКОЙ, НЕ ПИШИ ИЗ ПАМЯТИ

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

02 · ЦИФРА БЕЗ ИСТОЧНИКА, ЭТО ВЫДУМКА

Любая цифра, которую агент приводит, должна иметь рядом источник: ссылку на файл и строку, вывод команды, URL. Это касается и времени-эффорта: «займёт два дня» должно превратиться в «два часа на скрипт плюс час на тесты плюс ожидание ревью». Без разбивки оценка не считается. Не помнишь источник, пиши «нужно проверить», это нормально.

03 · ВОЗРАЖЕНИЕ — ЭТО НЕ СПОР, А СИГНАЛ ПЕРЕЧИТАТЬ

Англоязычное pushback (буквально «обратное давление») — это любая моя реакция «ты уверен?», «не так», «вот вывод, который противоречит твоему ответу». Когда такое приходит, правильный ход — не «защищаться» в новом сообщении, а заново открыть файл и перечитать. Был неправ — говорить прямо. Прав — привести новое доказательство, не повторять старое теми же словами. И в обратную сторону: переобуться без новых данных — тоже плохо, это сдача под давлением, не уточнение.

04 · СНАЧАЛА ДОКАЗАТЕЛЬСТВО, ПОТОМ ГИПОТЕЗА

Запрещено сначала писать «вероятно, проблема в кеше» и потом проверять. Сначала открываем файл, видим конкретный кусок, и только тогда называем причину. Гипотеза первой, даже если её потом подтвердили, успевает заразить остальной ответ.

05 · НЕПРОВЕРЕННОЕ ПОМЕЧАЙ КАК НЕПРОВЕРЕННОЕ

Если агент не прочитал файл, но что-то про него утверждает — это утверждение должно быть явно помечено: «не проверял, нужно открыть X, чтобы подтвердить». Запрещено маскировать неуверенность в уверенный тон. «Вероятно» без следующей фразы «сейчас проверю в Y» — хуже, чем чистое признание «не знаю».

06 · НЕ ИГРАЙ В «КОНЕЦ РАБОЧЕГО ДНЯ»

У агента нет рабочего дня и нет шести вечера. Когда задача занимает сорок минут реальной работы, нельзя в конце предлагать «давай продолжим завтра». Если есть следующий шаг и он не заблокирован, делать его сейчас, в той же сессии. Пауза допустима, только если я сам сказал, что устал, или мы ждём внешнее событие вроде сборки или ответа поддержки.

07 · ПОЛОВИНА РЕШЕНИЯ — ЭТО НЕ РЕШЕНИЕ

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

08 · НЕ УПРОЩАЙ РАДИ ЛЕНИ, УПРОЩАЙ РАДИ ЯСНОСТИ

Когда агент предлагает «вариант B, попроще», должен быть честный ответ, что теряется по сравнению с полным вариантом. По умолчанию делается полная реализация. Урезать только если я сам попросил, или если выигрыш полного варианта реально не окупается, и это обосновано числами или рисками, а не ощущением.

09 · ДЕСТРУКТИВ — ТОЛЬКО ПОСЛЕ ЯВНОГО «ОК»

Удаление файлов и папок, стирание таблиц (drop), принудительный пуш в общий репозиторий (force-push), остановка боевых сервисов, массовые правки без явного запроса — всё это требует отдельного подтверждения. Хук ловит то, что просочилось мимо текста. Но лучше, чтобы и текст не подходил к этим командам без подтверждения.

10 · ОБОБЩЕНИЯ ИЗ ОДНОГО СЛУЧАЯ — ЗАПРЕЩЕНЫ

Утверждения вида «все наши API делают X», «у каждого сервиса проблема Y» требуют проверки каждого. Проверил один из семи — пиши «один проверил, шесть не смотрел». Не рисуй паттерн из единичного случая и не подавай его как универсальный.

МАЯЧКИ В ОТВЕТЕ АГЕНТА

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

В этой части я даю те же десять правил, но с готовыми фразами, которые ты вставляешь в окно беседы. Каждая фраза — это короткое объяснение агенту, как себя вести в конкретной ситуации. Можно скопировать в файл правил один раз и больше не повторять.

01 · ЧИТАЙ ФАЙЛ ПЕРЕД ПРАВКОЙ, НЕ ПИШИ ИЗ ПАМЯТИ

Агент часто ошибается, потому что отвечает «как обычно бывает», а в твоём проекте обычно бывает иначе. Поэтому нужно прямо проговорить, чтобы он сначала смотрел.

Скажи агенту так:

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

02 · ЦИФРА БЕЗ ИСТОЧНИКА, ЭТО ВЫДУМКА

Любая цифра, которую агент приводит просто так, обычно от себя. Это касается денег, времени, размеров, сроков. Нужно требовать показывать, откуда взято.

Скажи агенту так:

Если приводишь цифру (стоимость, время, размер, срок),
обязательно укажи источник: файл, команду или ссылку.
Если оцениваешь время, разложи: столько-то на шаг A,
столько-то на шаг B, итого X часов. Без разбивки не оценивай.
Если источника нет, напиши «нужно проверить».

03 · ВОЗРАЖЕНИЕ — ЭТО НЕ СПОР, А СИГНАЛ ПЕРЕЧИТАТЬ

Когда ты пишешь агенту «ты уверен» или присылаешь вывод, который противоречит ему, агент часто начинает защищаться вместо того, чтобы заново посмотреть. Это нужно переключить.

Скажи агенту так:

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

04 · СНАЧАЛА ДОКАЗАТЕЛЬСТВО, ПОТОМ ГИПОТЕЗА

Если агент пишет «вероятно, проблема в X», и потом проверяет, его догадка уже окрашивает остальной ответ. Нужно поменять порядок.

Скажи агенту так:

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

05 · НЕПРОВЕРЕННОЕ ПОМЕЧАЙ КАК НЕПРОВЕРЕННОЕ

Часто агент уверенно говорит про код или конфиг, который не проверял. Это нужно требовать помечать явно.

Скажи агенту так:

Если ты что-то утверждаешь про мой проект, но не открывал
файл, чтобы проверить, явно так и пиши: «не проверял,
нужно открыть X, чтобы подтвердить». Не маскируй
неуверенность в уверенный тон.

06 · НЕ ИГРАЙ В «КОНЕЦ РАБОЧЕГО ДНЯ»

Иногда агент сам предлагает «давай продолжим завтра», даже когда мы поработали сорок минут. У него нет рабочего дня. Это нужно отключить.

Скажи агенту так:

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

07 · ПОЛОВИНА РЕШЕНИЯ — ЭТО НЕ РЕШЕНИЕ

Иногда агент сдаёт половину работы со словами «остальное доделаем позже». Это нужно запретить.

Скажи агенту так:

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

08 · НЕ УПРОЩАЙ РАДИ ЛЕНИ, УПРОЩАЙ РАДИ ЯСНОСТИ

Иногда агент сам предлагает «вариант B, попроще», и подаёт его как рекомендованный. Чаще всего это просто меньше работы для него.

Скажи агенту так:

По умолчанию делай полную реализацию. Если предлагаешь
упрощённый вариант, обязательно объясни, что теряется
по сравнению с полным. Не подавай простой вариант как
рекомендованный, если за ним не стоит конкретный аргумент,
не «получится быстрее».

09 · ДЕСТРУКТИВ — ТОЛЬКО ПОСЛЕ ЯВНОГО «ОК»

Удаление файлов, принудительный пуш в общий репозиторий (force-push), операции с базой, остановка сервисов — всё это в обычном диалоге не должно проскакивать. Хук это страхует, но и в тексте лучше проговорить.

Скажи агенту так:

Перед тем как удалить файл или папку, сделать force-push,
выполнить drop в базе данных, остановить production-сервис,
или массово что-то поменять, спрашивай у меня явное
подтверждение. Даже если кажется очевидным.

10 · ОБОБЩЕНИЯ ИЗ ОДНОГО СЛУЧАЯ — ЗАПРЕЩЕНЫ

Агент любит писать «у всех твоих API одна и та же проблема», когда проверил один. Это нужно поправить.

Скажи агенту так:

Если делаешь утверждение про несколько объектов («все
наши скрипты», «каждый сервис», «во всех роутах»), сначала
проверь каждый. Если проверил только один, пиши именно
так: «один проверил, остальные не смотрел». Не рисуй
паттерн из одного случая.
СЛОВА-МАЯЧКИ В ОТВЕТЕ АГЕНТА

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

КАК ШКАФ ЖИВЁТ ДАЛЬШЕ

Шкаф живёт по простому принципу. Поправил агента три раза по одному и тому же поводу, попроси его записать это в правило. Один раз агент чуть не сделал что-то опасное, попроси добавить такую команду в защиту. Объяснил одну и ту же последовательность действий в третий раз, попроси превратить её в готовый навык. Раз в месяц открывай шкаф и смотри: что не используется, что устарело. Шкаф перестаёт расти, когда проект перестаёт развиваться. Пока проект живой, шкаф тоже живой.

Главная мысль на вынос: ты не должен помнить всё это сам и повторять каждой новой беседе. Один раз сложил в шкаф, дальше агент сам открывает и читает. Твоя задача только подкладывать новые карточки, когда замечаешь повтор.

FOLDER 001 Серия «Папка проекта для агента» Публикация 002 / 06.05.26
ОТМЕТКА
УТВЕРЖДЕНО ДЛЯ СЕРИИ
AUTHOR · /author/

END OF SHEET 14

КАК ПАПКА ЖИВЁТ ДАЛЬШЕ

Папка живёт у меня дальше так. Заметил третью одну и ту же поправку, записал в правило. Поймал инцидент с командой Bash, добавил паттерн в guard. Объяснил агенту одну и ту же процедуру в третий раз, выделил скилл. Раз в месяц прохожу обзор: что устарело, что не используется, что разрослось и пора декомпозировать. Папка перестаёт расти, когда проект перестаёт развиваться. Пока проект живой, она тоже живая.

FOLDER 001 Серия «Папка проекта для агента» Публикация 002 / 06.05.26
ОТМЕТКА
УТВЕРЖДЕНО ДЛЯ СЕРИИ
AUTHOR · /author/

END OF SHEET 14

// Обсуждение

Можно писать анонимно. Укажите email, чтобы получать уведомления об ответах.