> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bettertoken.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Как настроить permissions и hooks в Claude Code

> Настройте allow, ask и deny через /permissions и settings.json, затем добавьте, проверьте и отладьте hooks Claude Code.

## Короткий ответ

Выполните `/permissions` в Claude Code, чтобы просмотреть и изменить правила доступа. Для постоянной настройки добавьте `allow`, `ask` и `deny` в `settings.json`. Hooks находятся в тех же файлах и запускают форматирование, тесты или проверки безопасности до и после tool calls. Приоритет правил: **deny → ask → allow**, поэтому allow не может переопределить deny.

Эти настройки управляют локальными инструментами на вашем компьютере. BetterToken меняет только Base URL, API Key и маршрутизацию model API; он не обходит локальные permissions и не запускает hooks вместо Claude Code.

## Когда использовать permissions, а когда hooks

| Задача                                                     | Используйте                       |
| ---------------------------------------------------------- | --------------------------------- |
| Выполнять определённую команду без запроса                 | `permissions.allow`               |
| Всегда спрашивать перед операцией                          | `permissions.ask`                 |
| Запретить чтение чувствительных файлов или опасную команду | `permissions.deny`                |
| Форматировать или тестировать после изменения файла        | Hook `PostToolUse`                |
| Проверить или заблокировать действие до выполнения         | Hook `PreToolUse`                 |
| Объяснить модели правила команды                           | `CLAUDE.md`, а не permission rule |

## Выберите область действия

| Файл                          | Область                                  | Добавлять в репозиторий? |
| ----------------------------- | ---------------------------------------- | ------------------------ |
| `~/.claude/settings.json`     | Все проекты текущего пользователя        | Нет                      |
| `.claude/settings.json`       | Текущий проект и команда                 | Да                       |
| `.claude/settings.local.json` | Текущий проект только на этом компьютере | Нет                      |

<Warning>
  Permissions, hooks и переменные окружения должны находиться в `settings.json`, а не в `~/.claude.json`. Последний хранит состояние приложения и настройки интерфейса.
</Warning>

## Настройте минимальные permission rules

<Steps>
  <Step title="Проверьте существующие правила через /permissions">
    В Claude Code выполните:

    ```text theme={null}
    /permissions
    ```

    Интерфейс покажет allow, ask и deny с файлами-источниками. Перед добавлением правил проверьте, нет ли уже project или managed settings.
  </Step>

  <Step title="Добавьте узкие правила">
    Этот пример разрешает обычные tests и lint, всегда спрашивает перед `git push` и запрещает чтение `.env`:

    ```json theme={null}
    {
      "permissions": {
        "allow": [
          "Bash(npm run lint *)",
          "Bash(npm test *)"
        ],
        "ask": [
          "Bash(git push *)"
        ],
        "deny": [
          "Read(./.env)",
          "Read(./.env.*)"
        ]
      }
    }
    ```

    Замените команды на scripts, которые действительно есть в проекте. Не включайте `bypassPermissions` только ради отключения запросов: официальная документация рекомендует этот режим лишь для изолированных контейнеров и VM.
  </Step>

  <Step title="Проверьте правила в /permissions">
    Сохраните файл и снова выполните `/permissions`. Убедитесь, что каждое правило отображается с правильным источником, затем проверьте по одному сценарию allow, ask и deny.
  </Step>
</Steps>

## Добавьте готовый hook форматирования

Этот пример запускает formatter проекта после того, как Claude Code использует `Edit` или `Write`:

```json theme={null}
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "npm run format"
          }
        ]
      }
    ]
  }
}
```

Если в файле уже есть `permissions`, добавьте `hooks` в тот же верхнеуровневый JSON-объект. Не создавайте отдельный `.claude/hooks.json`. Сначала вручную выполните `npm run format` и убедитесь, что команда завершается успешно.

<Warning>
  Command hooks выполняются с правами текущего пользователя системы. Используйте только проверенные scripts и никогда не выводите из hook API Keys, tokens, содержимое `.env` или другие секреты.
</Warning>

## Проверьте hook

1. Выполните `/hooks` в Claude Code.
2. Откройте **PostToolUse** и убедитесь, что указаны `Edit|Write` и `npm run format`.
3. Попросите Claude изменить тестовый файл.
4. Проверьте вывод hook и формат файла; hook должен выполниться один раз без ошибки.

Обычно Claude Code автоматически перечитывает изменения settings. Если этого не произошло, завершите сессию и перезапустите Claude Code.

## Частые ошибки

| Симптом                                                      | Причина                                                 | Решение                                                                                                                 |
| ------------------------------------------------------------ | ------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| Permission rules не применяются                              | Они записаны в `~/.claude.json` или неверной директории | Перенесите их в `~/.claude/settings.json`, `.claude/settings.json` или `.claude/settings.local.json`                    |
| Разрешённое действие всё равно блокируется                   | Оно совпало с deny или managed rule                     | Проверьте источники в `/permissions`; deny имеет приоритет над ask и allow                                              |
| Hook не запускается                                          | Event или matcher не совпадает с инструментом           | Проверьте `/hooks`; `PreToolUse` запускается до выполнения, `PostToolUse` после успеха, matcher чувствителен к регистру |
| Hook запускается, но команда завершается ошибкой             | Неверный script, рабочая директория или dependency      | Сначала выполните ту же команду вручную из директории проекта                                                           |
| После подключения BetterToken остались запросы подтверждения | API provider и локальные permissions независимы         | Сохраните Base URL BetterToken и отдельно настройте точные permissions Claude Code                                      |
| Нужно временно отключить все hooks                           | Hook может мешать отладке                               | Добавьте `"disableAllHooks": true`, а после проверки удалите параметр или задайте `false`                               |

## Границы BetterToken

BetterToken отвечает за доступ Claude Code к model API, маршрутизацию моделей, баланс и usage. Claude Code по-прежнему управляет:

* Чтением и изменением файлов
* Подтверждением Bash-команд
* Моментом запуска hooks и выполняемыми scripts
* Sandbox, MCP и правилами проекта

Для ошибок `401`, Base URL или model mapping откройте [инструкцию по Claude Code](/ai-tools/claude-code). Для подтверждений команд и automation используйте диагностику permissions и hooks на этой странице.

## Связанные документы

* [Настройка Claude Code с BetterToken](/ai-tools/claude-code)
* [Что такое CLAUDE.md в Claude Code](/faq/claude-code/claude-md)
* [Почему Claude Code расходует много tokens](/faq/token-cost/claude-code-token-usage)
* [MCP и API Key / Base URL в Claude Code](/faq/concepts/mcp-vs-api-key-base-url)

## References

* [Claude Code permissions](https://code.claude.com/docs/en/permissions)
* [Claude Code hooks guide](https://code.claude.com/docs/en/hooks-guide)
* [Claude Code hooks reference](https://code.claude.com/docs/en/hooks)
* [Debug Claude Code configuration](https://code.claude.com/docs/en/debug-your-config)
