Коротко: три шага: найти свой settings.json, прописать нужные поля (permissions, env, hooks) и собрать statusline. Уже знаете, какой файл у вас главный? Переходите сразу к шагу 2. А если не хочется писать JSON руками — есть генератор settings.json, который соберёт файл по галочкам.

Шаг 1. Найдите свой settings.json

Claude Code читает настройки из нескольких файлов, и они складываются друг на друга по уровню приоритета: от общих для машины до личных для одного проекта.

  1. Пользовательский уровень: ~/.claude/settings.json. Применяется во всех проектах на этой машине: модель по умолчанию, глобальные permissions, часто используемые env-переменные.
  2. Уровень проекта: .claude/settings.json в корне репозитория. Обычно коммитится в git, задаёт общие для команды правила: разрешённые команды, hooks, statusline проекта.
  3. Локальный уровень проекта: .claude/settings.local.json в том же репозитории. Личные переопределения одного разработчика, например свой ключ или свои permissions. Как правило, добавляется в .gitignore, чтобы не утекал в общий репозиторий.

При конфликте более специфичный уровень (локальный проектный) перекрывает более общий (пользовательский). Это удобно: в общий .claude/settings.json кладёте то, что должно работать у всей команды одинаково, а личные исключения кладите в settings.local.json.

Шаг 2. Настройте ключевые поля

permissions

Список правил: какие инструменты и команды Claude Code может выполнять без подтверждения, какие можно выполнять только после вашего разрешения, а какие запрещены полностью. Обычно оформляется тремя списками:

json — .claude/settings.json
{ "permissions": { "allow": ["Bash(git status)", "Bash(npm run *)"], "ask": ["Bash(git push*)"], "deny": ["Bash(rm -rf*)"] } }

Это то самое место, где стоит один раз явно разрешить рутинные проверочные команды (линтер, тесты, git status), чтобы не подтверждать их вручную каждый раз, и одновременно явно запретить опасные операции.

env

Переменные окружения, которые Claude Code прокинет в свой процесс автоматически, без ручного export в терминале. Сюда логично вынести подключение к API-шлюзу из статьи про установку:

json — ~/.claude/settings.json
{ "env": { "ANTHROPIC_BASE_URL": "https://api.claude-opus-5.ru", "ANTHROPIC_API_KEY": "sk-ВАШ-КЛЮЧ" } }
Если храните ключ прямо в 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.

1. Опишите statusline в settings.json
json — .claude/settings.json
{ "statusLine": { "type": "command", "command": "bash .claude/statusline.sh" } }
2. Напишите сам скрипт

Скрипт получает JSON с данными сессии (в том числе название текущей модели и рабочую директорию) на stdin. Минимальный рабочий пример, который читает JSON через jq и добавляет текущую git-ветку:

bash — .claude/statusline.sh
#!/usr/bin/env bash input=$(cat) model=$(echo "$input" | jq -r '.model.display_name // "Claude"') dir=$(echo "$input" | jq -r '.workspace.current_dir // "."') branch=$(git -C "$dir" branch --show-current 2>/dev/null) printf "%s · %s%s" "$model" "$(basename "$dir")" "${branch:+ · $branch}"

Сделайте скрипт исполняемым (chmod +x .claude/statusline.sh на macOS/Linux) и перезапустите Claude Code. Строка внизу должна показывать модель, папку и текущую git-ветку. Точный состав полей во входящем JSON может отличаться между версиями Claude Code: если что-то не находится, распечатайте $input в файл и посмотрите на реальную структуру.

Если не хочется собирать settings.json вручную, полями env, permissions и statusLine из этой статьи можно управлять через генератор settings.json: отмечаете нужное галочками, получаете готовый файл.

Частые ошибки конфигурации