settings.json, прописать нужные поля (permissions, env, hooks) и собрать statusline. Уже знаете, какой файл у вас главный? Переходите сразу к шагу 2. А если не хочется писать JSON руками — есть генератор settings.json, который соберёт файл по галочкам.
Шаг 1. Найдите свой settings.json
Claude Code читает настройки из нескольких файлов, и они складываются друг на друга по уровню приоритета: от общих для машины до личных для одного проекта.
- Пользовательский уровень:
~/.claude/settings.json. Применяется во всех проектах на этой машине: модель по умолчанию, глобальные permissions, часто используемые env-переменные. - Уровень проекта:
.claude/settings.jsonв корне репозитория. Обычно коммитится в git, задаёт общие для команды правила: разрешённые команды, hooks, statusline проекта. - Локальный уровень проекта:
.claude/settings.local.jsonв том же репозитории. Личные переопределения одного разработчика, например свой ключ или свои permissions. Как правило, добавляется в.gitignore, чтобы не утекал в общий репозиторий.
При конфликте более специфичный уровень (локальный проектный) перекрывает более общий (пользовательский). Это удобно: в общий .claude/settings.json кладёте то, что должно работать у всей команды одинаково, а личные исключения кладите в settings.local.json.
Шаг 2. Настройте ключевые поля
permissions
Список правил: какие инструменты и команды Claude Code может выполнять без подтверждения, какие можно выполнять только после вашего разрешения, а какие запрещены полностью. Обычно оформляется тремя списками:
Это то самое место, где стоит один раз явно разрешить рутинные проверочные команды (линтер, тесты, git status), чтобы не подтверждать их вручную каждый раз, и одновременно явно запретить опасные операции.
env
Переменные окружения, которые Claude Code прокинет в свой процесс автоматически, без ручного export в терминале. Сюда логично вынести подключение к API-шлюзу из статьи про установку:
settings.json, кладите его в пользовательский ~/.claude/settings.json или в .claude/settings.local.json. Оба этих файла по умолчанию вне git. В общий проектный .claude/settings.json, который коммитится в репозиторий, реальный ключ добавлять нельзя.
hooks
Команды, которые Claude Code выполняет автоматически на определённых событиях: например, перед выполнением инструмента или после него. Используются для дополнительных проверок: прогнать линтер после каждого редактирования файла, залогировать использованные команды, заблокировать конкретное опасное действие сверх стандартных permissions. Задаются как shell-команды, привязанные к типу события и, опционально, паттерну инструмента. Подробный синтаксис событий стоит сверять с актуальной документацией Claude Code, так как набор поддерживаемых хуков расширяется.
Шаг 3. Соберите кастомную statusline
Statusline — это настраиваемая строка внизу интерфейса, которая обновляется перед каждым запросом. Задаётся полем statusLine: указываете тип command и путь к скрипту, который получает контекст текущей сессии через stdin в формате JSON и печатает готовую строку в stdout.
Скрипт получает JSON с данными сессии (в том числе название текущей модели и рабочую директорию) на stdin. Минимальный рабочий пример, который читает JSON через jq и добавляет текущую git-ветку:
Сделайте скрипт исполняемым (chmod +x .claude/statusline.sh на macOS/Linux) и перезапустите Claude Code. Строка внизу должна показывать модель, папку и текущую git-ветку. Точный состав полей во входящем JSON может отличаться между версиями Claude Code: если что-то не находится, распечатайте $input в файл и посмотрите на реальную структуру.
settings.json вручную, полями env, permissions и statusLine из этой статьи можно управлять через генератор settings.json: отмечаете нужное галочками, получаете готовый файл.
Частые ошибки конфигурации
- Невалидный JSON: лишняя запятая после последнего поля или незакрытая скобка. Claude Code в этом случае молча откатывается к настройкам по умолчанию; стоит проверять файл через любой JSON-линтер после правок.
- Ключ или секреты в закоммиченном
.claude/settings.json: секретные значения должны жить вsettings.local.jsonили пользовательском конфиге, не в файле, который уходит в общий репозиторий. - Statusline-скрипт без прав на выполнение: на macOS/Linux часто просто забывают
chmod +x, из-за этого statusline не появляется. - Конфликт уровней настроек: если что-то не применяется, проверьте, не переопределяет ли его более специфичный уровень (
settings.local.jsonвыше, чем проектный, который выше, чем пользовательский).