Иерархия конфигов
Три уровня конфигурации Claude Code — от глобального до стека. Паттерн DRY: общее один раз, специфичное рядом с кодом.
#📐 Универсальный паттерн: три уровня
Claude Code читает конфиги по каскаду. Нижние уровни дополняют и переопределяют верхние. Знать этот порядок критично — иначе непонятно, почему Claude ведёт себя не так, как ожидается.
-
1
🌐 Глобальный уровень — для всех проектов
~/.claude/ (C:\Users\Имя\.claude\)
Настройки применяются всегда, в любом проекте, в любой папке. Здесь — то, что неизменно для всей рабочей станции: модель по умолчанию, глобальные permissions, базовые hooks, MCP-серверы которые нужны везде.settings.jsonsettings.local.jsonhelpers/*.cjsCLAUDE.md -
2
📁 Корень монорепо / workspace — для всех стеков
E:\Clients\ (или корень git-репо)
Правила, общие для всей команды / монорепо: код-стандарты, запрещённые операции, доменные правила.CLAUDE.mdв этой папке — «командный договор». CLAUDE.md читается при запуске из любой подпапки.CLAUDE.md.claude/settings.jsonPORTS.md -
3
🔧 Папка стека / проекта — специфично для технологии
E:\Clients\my-laravel-app\ (конкретный проект)
Стек-специфичные MCP, инструменты форматирования, правила архитектуры. Переопределяет только то, что нужно для этого стека — остальное наследует с верхних уровней.CLAUDE.md.mcp.jsonpint.jsonruff.tomleslint.config.js
settings.local.json предназначен для личных настроек, которые не должны попасть в git — API-ключи, локальные пути, docker socket. Убедитесь что он добавлен в .gitignore. Если вы случайно закоммитили его с API-ключом — ключ нужно немедленно отозвать в console.anthropic.com.#⚡ Правила приоритета
Когда одно и то же настраивается на нескольких уровнях, выигрывает самый конкретный (нижний) уровень.
| Уровень 1 / 2 | Уровень 2 / 3 (побеждает) | |
|---|---|---|
~/.claude/settings.json: model=opus | → | .claude/settings.json в проекте: model=sonnet ✓ |
Глобальный .mcp.json: postgres-mcp | + | Проектный .mcp.json: laravel-boost + postgres-mcp ✓ |
| Глобальный CLAUDE.md: «всегда Pest для PHP» | + | Проектный CLAUDE.md: «и Service pattern» (конкатенация) ✓ |
| Глобальный allowedTools: Bash, Read, Write | + | Проектный: добавляет mcp__laravel__* (merge, не replace) ✓ |
#🤔 Что куда класть: правила выбора
Нужно во всех проектах на машине?
→ Глобальный ~/.claude/settings.json. Пример: модель по умолчанию, cost-tracker hook, secret-scanner hook.
Нужно всем разработчикам в команде / всем стекам монорепо?
→ CLAUDE.md и .claude/settings.json в корне репо. Пример: запрет на миграции без подтверждения, список портов, proxy-правила.
Специфично для одного стека (Laravel, FastAPI, Nuxt)?
→ .mcp.json и CLAUDE.md в папке проекта. Пример: laravel-boost MCP только для Laravel, ruff только для Python.
Только для меня локально (не в git)?
→ settings.local.json (добавить в .gitignore). Пример: личные API Key, локальный путь к docker socket.
MCP-сервер нужен только в конкретном проекте?
→ .mcp.json в папке проекта (не в глобальном settings). Это изолирует инструменты и не нагружает контекст других проектов.
#🏗️ Реализация для Laravel / FastAPI / Windows-стека
Структура E:\Clients\ — монорепо с тремя стеками. Каждый стек имеет свою папку с изолированными конфигами, но все используют общий Caddy proxy и базовые hooks.
#Уровень 2 — корневой CLAUDE.md (общий)
#Уровень 3 — Laravel стек
Тестирование: Pest с фабриками, не phpunit напрямую. Feature тест на каждый endpoint.
Архитектура: Service layer обязателен. Controllers — тонкие. Eloquent в репозиториях.
Форматирование: Pint после каждого PHP файла. Конфиг: pint.json в корне проекта.
Миграции: Только additive-изменения. Никаких dropColumn без review.
laravel-boost: Artisan команды, роуты, модели через MCP без bash.
postgres-mcp: Read-only доступ к БД. Роль claude_readonly с REVOKE ALL.
#Уровень 3 — Python/FastAPI стек
Форматирование: Ruff после каждого .py файла. Mypy для type hints.
Тесты: pytest-asyncio для async кода. Coverage ≥ 80%.
ETL-операции: Перед массовым UPDATE: SET max_parallel_workers_per_gather=1
FastAPI: Pydantic v2. Dependency injection через Depends. Никаких глобальных переменных состояния.
postgres-mcp: Тот же сервер что в Laravel, но с другой строкой подключения (другая БД).
Нет laravel-boost: Artisan-команды Python-проекту не нужны. Меньше MCP = меньше токенов.
#Уровень 3 — Vue/Nuxt фронтенд
#🌐 Уровень 1 — глобальный settings.json
Три категории настроек: всегда-активные, стоимость/безопасность, hooks.
#⚠️ Антипаттерны — что не делать
- Один CLAUDE.md в корне с 500 строками для всех стеков
- MCP laravel-boost подключён глобально — нагружает Python-проекты
- API Key в settings.json (не local) — попадут в git
- Дублировать Caddy/proxy правила в каждом проектном CLAUDE.md
- Хранить hooks в проектной папке — при смене проекта потеряются
- Разные версии правил без понимания приоритета
- Короткий корневой CLAUDE.md + детальные проектные
- MCP только там, где нужен — экономит токены
- Секреты в settings.local.json + .gitignore
- Proxy-правила один раз в корневом CLAUDE.md
- Все hooks в ~/.claude/helpers/ — работают везде
- Добавлять настройки на самый нижний подходящий уровень
#🔍 Диагностика: почему Claude не читает нужный конфиг
claude из папки конкретного проекта или передавать путь явно.