Каталог .claude - это место, где живёт вся кастомизация проекта, и разобраться в нём проще всего, разделив содержимое по ролям. Одни файлы - это инструкция, влияющая на модель (CLAUDE.md, rules). Другие - policy, задающая правила и разрешения (settings, permissions). Третьи - расширение, добавляющее исполняемые компоненты (commands, agents, skills, hooks, MCP). Смешение этих ролей - частый источник путаницы: инструкцию правят, ожидая эффекта policy, а исполняемый компонент принимают за безобидную заметку.
Типичный командный репозиторий раскладывает эти роли по знакомой структуре. В корне - CLAUDE.md и некоммитируемый CLAUDE.local.md, .mcp.json с определениями MCP, .worktreeinclude. Внутри .claude - settings.json и некоммитируемый settings.local.json, а рядом каталоги rules, skills, agents, hooks, output-styles, commands и, если настроена, agent-memory. Полезно один раз увидеть эту карту целиком, чтобы понимать, куда класть новую сущность.
Не каждый проект нуждается во всех каталогах, и это важный принцип. Минимум - короткий CLAUDE.md и .claude/settings.json; остальное добавляют, когда появляется повторяемая задача или измеримый контроль, а не заранее. Правило выбора простое: факты и правила, нужные почти всегда, - в CLAUDE.md и rules; процедура по запросу - в skill; отдельная роль со своим контекстом - в subagent; проверка события - в hook; внешний источник - в MCP; переносимый набор - в plugin; принудительная политика - в managed.
Полезно один раз свести потребность и механизм в таблицу, чтобы не изобретать под каждую задачу новую сущность. Ниже такая карта - от фактов проекта до принудительной политики. К ней возвращаются, когда рука тянется положить процедуру в CLAUDE.md или правило в skill: у каждого механизма своя роль и своя семантика загрузки, и выбор правильного механизма важнее, чем набить одно место всем подряд.
| Потребность | Механизм |
|---|---|
| Факты и правила, нужные почти всегда | CLAUDE.md / rules |
| Процедура по запросу | skill |
| Отдельная роль и context | subagent |
| Детерминированная проверка события | hook |
| Внешний tool / источник данных |
|---|
| MCP |
| Переносимый набор компонентов | plugin |
|---|
| Принудительная политика | managed settings |
|---|
Отдельная тонкость - флаг --add-dir даёт доступ к дополнительным каталогам, но не превращает лежащую там конфигурацию в project-конфигурацию. Это про доступ к файлам, а не про подключение чужой политики. И вообще у разных компонентов - subagents, skills, rules, memory - различная семантика обнаружения, поэтому по каждому сверяются с его документацией, а не переносят интуицию с одного механизма на другой.
Что коммитить, а что нет - вопрос и удобства, и безопасности. Коммитят общие инструкции, общие settings, отревьюенные hooks, skills, agents и .mcp.json без секретов. Не коммитят settings.local.json и CLAUDE.local.md, OAuth- и кэш-состояние, токены, машинно-специфичные абсолютные пути и persistent memory с личными или чувствительными данными. Граница простая: в репозиторий идёт то, что должно быть общим и отревьюенным, а личное и секретное остаётся локальным.
Изменение конфигурации стоит ревьюить как код, потому что правка .claude/settings.json, hook или .mcp.json влияет на все будущие сессии. В pull request отвечают на конкретные вопросы: расширились ли permissions, пути или сетевые домены; появилась ли исполняемая команда; откуда берётся пакет, плагин или сервер; есть ли version pin; не попал ли секрет; что увидит пользователь до trust и одобрения; как это изменение отключить. Каждый пункт закрывает свой класс риска.
Типичные провалы работы с .claude - про смешение ролей и небрежность. Положить исполняемый hook или MCP как безобидную деталь, не отревьюив его как код. Закоммитить settings.local или CLAUDE.local, размножив личное по репозиторию. Спутать доступ через --add-dir с подключением чужой политики. Держите три роли раздельно, коммитьте только общее и отревьюенное, а любую правку конфигурации проверяйте теми же вопросами, что и изменение кода.
repository/
├── CLAUDE.md
├── CLAUDE.local.md # личный, не коммитить
├── .mcp.json # project MCP
├── .worktreeinclude
└── .claude/
├── settings.json # общие settings/policy
├── settings.local.json # личный, не коммитить
├── rules/ # инструкция (path-scoped)
├── skills/ # процедура по запросу
├── agents/ # отдельные роли
├── hooks/ # проверки событий
├── output-styles/
└── commands/