# Правила allow и deny: где они живут

Курс: Claude Code: уровень профи — https://zero2claude.ru/learn/claude-code-pro
Канонический URL: https://zero2claude.ru/learn/claude-code-pro/1-2-pravila-allow-deny

Правила разрешений хранятся в файлах настроек, и файл решает, на кого правило действует — на тебя везде, на всю команду или только на тебя в этом проекте. Запрет проверяется первым.

В прошлом уроке ты выбирал режим — общий уровень доверия. Правила разрешений тоньше: они говорят, какие конкретные действия Claude может делать без спроса, а какие запрещены всегда.

## Как выглядит правило

Правила лежат в блоке `permissions` файла настроек:

```json
{
  "permissions": {
    "allow": ["Bash(npm test)"],
    "deny": ["Read(./.env)", "Read(./.env.*)"]
  }
}
```

- `allow` — что можно без вопроса: здесь запуск `npm test`;
- `deny` — что нельзя никогда: здесь чтение файлов `.env`, где лежат секреты.

Внутри сессии `/permissions` покажет, какие правила сейчас действуют, а `/status` — какие файлы настроек подхватились.

## Какой файл — на кого действует

Это главное. Одно и то же правило в разных файлах значит разное:

| Файл | На кого действует | Что сюда класть |
|---|---|---|
| `~/.claude/settings.json` | на тебя, во всех проектах | твои личные привычки |
| `.claude/settings.json` (коммитится) | на всю команду в проекте | общие правила: что читать нельзя, какие команды разрешены |
| `.claude/settings.local.json` (не в git) | на тебя, в этом проекте | твои исключения |
| управляемые настройки | на всю организацию | политика, которую не переопределить |

Когда ты отвечаешь «Да, и больше не спрашивать» на команду, разрешение сохраняется в `settings.local.json` — это твоё личное исключение, а не правило команды.

## Кто победит

Если один ключ задан в нескольких файлах, выигрывает более высокий уровень: управляемые настройки, затем командная строка, затем local, затем общий проектный, затем пользовательский. А **списки правил** — `allow`, `deny` — не перетирают друг друга, а складываются.

Внутри правил порядок жёсткий: **сначала `deny`, потом `ask`, потом `allow`**, и решает первое совпадение. Поэтому запрет нельзя случайно перебить разрешением в другом файле.

**Осторожно.** 
Правило Read(./.env) останавливает инструменты чтения Claude и знакомые команды вроде cat, но не скрипт, который сам открывает файл. Полностью закрыть такие обходы помогает песочница — следующий урок. Секреты в репозитории это не делает безопасными: .env всё равно не коммитят.
