---
title: "Claude Code — команды, настройки, флаги"
url: "https://romankryvolapov.com/ru/claude-code-commands-and-settings/"
description: "Справочник Claude Code: все слэш-команды с разбором аргументов и примерами, ключи settings.json, правила прав доступа, терминальные подкоманды, флаги и переменные окружения. Актуально на август 2026."
language: ru
updated: 2026-08-31
---
**Привет!**

Это справочник. Не рассказ о том, как правильно работать с агентом — про это у меня есть [отдельная статья](/ru/claude-code-best-practices/), — а перечень: что можно набрать, что можно написать в настройках, что из этого что делает и как это выглядит на практике.

**Актуальность: август 2026, Claude Code 2.1.251.** Для технической статьи это важнее обычного: между соседними сборками команды исчезают, меняют имена и меняются местами. Если у вас другая версия, `/help` и `claude --help` всегда правы, а я — только на момент написания.

## Три места, куда вводят команды

Прежде чем листать таблицы, полезно понимать, что поверхностей три и они не пересекаются.

**Слэш-команды** набираются внутри работающей сессии, с `/` в начале строки. Они управляют разговором: сменить модель, сжать контекст, откатить правки, запустить ревью. В терминале они не работают.

**`settings.json`** — файл на диске. Он задаёт, каким Claude Code запустится: какая модель, какие права у инструментов, какие хуки, что показывать в строке состояния. Значительная часть настроек существует только здесь и не имеет команды-эквивалента.

**Терминальные команды `claude`** вводятся в обычной оболочке, до или помимо сессии: установка, авторизация, MCP-серверы, плагины, фоновые агенты, неинтерактивный запуск для скриптов.

Разделение не декоративное. Половина вопросов «почему не срабатывает» объясняется тем, что человек написал `/model` в терминале или `--effort` в файле настроек. Есть, впрочем, и приятное исключение: в неинтерактивном режиме `claude -p` слэш-команды в тексте промпта работают — про это ниже отдельно.

## Слэш-команды

Набираются внутри работающей сессии, с `/` в начале строки. У каждой команды ниже собрано всё сразу: аргументы со всеми значениями, тонкости и примеры.

Пометки: **[Навык]** — встроенный навык, то есть готовый промпт-сценарий; **[Воркфлоу]** — встроенный мульти-агентный воркфлоу; **[нет в документации]** — в сборке есть, в публичных источниках не описано; **[выключена]** — зарегистрирована, но в 2.1.251 не работает.

### Сессии и разговор

Четыре команды этой группы делают похожее, и их постоянно путают. Разница в том, что копируется и где появляется результат:

| Команда | Что копируется | Где идёт работа | Куда попадёт результат |
|---|---|---|---|
| `/branch` | весь разговор | здесь же, вы продолжаете в ответвлении | в ответвление; оригинал остаётся нетронутым |
| `/fork` | весь разговор | в фоновой сессии, параллельно вам | в отдельную сессию, к которой вы подключаетесь позже |
| `/subtask` | весь контекст, одноразово | в субагенте | обратно в этот же разговор одним сообщением |
| `/background` | ничего не копируется | эта же сессия уезжает в фон | она же, когда вы к ней вернётесь |

#### `/clear [имя]`

Начать новый разговор с чистым контекстом. Алиасы: `/reset`, `/new`.

Старый разговор не удаляется — он остаётся на диске и открывается через `/resume`. Необязательный аргумент подписывает его в списке: без подписи вы через неделю будете смотреть на десяток безымянных строк.

Если очистили случайно, в том же процессе это отменяется: в меню `/rewind` есть запись предыдущей сессии, она выглядит как `/resume <id> (previous session)`.

Стоит помнить и про цену: `/clear` не стоит ничего, тогда как `/compact` — крупный запрос со всем контекстом. Если разговор больше не нужен, очистка дешевле сжатия на весь объём окна.

```
/clear
/clear эксперимент с очередями, не взлетело
```

#### `/resume [id или поисковая фраза]`

Вернуться к прошлому разговору. Алиас: `/continue`.

| Что передали | Что произойдёт |
|---|---|
| ничего | Откроется интерактивный список последних сессий этой папки |
| идентификатор сессии | Она откроется сразу, без списка |
| произвольный текст | Поиск по содержимому разговоров; из совпавших предлагается выбрать |

Список привязан к **рабочей папке**: разговор из другого проекта в нём не появится. А вот по идентификатору сессия открывается из любой папки на машине — до версии 2.1.223 искали только в текущем проекте и его рабочих копиях. Для скриптов это удобно: забрали `session_id` из вывода `claude -p --output-format json` и продолжили откуда угодно.

Транскрипты чистятся по `cleanupPeriodDays`, по умолчанию через тридцать дней. Если рассчитываете возвращаться к старым разговорам, поднимите значение заранее — восстанавливать удалённое неоткуда.

Терминальные формы: `claude -c` продолжает последний разговор папки без выбора (фоновые сессии пропускает), `claude -r` открывает тот же выбор до старта сессии, `claude -r <id> --fork-session` продолжает старый разговор с новым идентификатором, оставляя исходный нетронутым.

```
/resume
/resume 8f3c1d2e-4b5a-...
/resume дедлок в пуле
```

#### `/branch [имя]`

Ответвить разговор от текущей точки; оригинал сохраняется целиком.

Это «сохранись перед боссом». Вы в точке, где непонятно, какой из двух подходов лучше; ответвляетесь, пробуете первый, и если не вышло — возвращаетесь в оригинал через `/resume` и пробуете второй, не таща за собой неудачную попытку в контексте. Имя необязательное, но с ним потом проще найти нужную ветку в списке.

```
/branch
/branch попробовать-через-очередь
```

#### `/fork [задача]`

Скопировать разговор в фоновую сессию, которая работает над задачей параллельно вам.

Это «пусть кто-нибудь займётся этим, пока я делаю своё». Копия получает весь накопленный контекст; результат вы заберёте, подключившись к ней через `claude attach` или экран `claude agents`. Начиная с 2.1.221 копии заодно велено завести собственную рабочую копию git, прежде чем править код, — чтобы два агента не наступали друг другу на ноги в одном дереве.

**Осторожно с чужими инструкциями.** В версиях с 2.1.161 по 2.1.211 то, что сейчас называется `/subtask`, называлось `/fork`, и имена поменялись местами в 2.1.212. Статья или скрипт, написанные до этого, имеют в виду прямо противоположное. Плюс частный случай: если экран агентов выключен, `/fork` возвращается к старому поведению и работает как субагент.

```
/fork
/fork собери релизные заметки по коммитам с прошлого тега
/fork прогони весь тест-сьют и составь список падающих с причинами
```

#### `/subtask <задача>`

Отправить субагента с вашим контекстом; результат вернётся в этот же разговор.

Это «сходи посмотри и вернись». Отличие от `/fork` принципиальное: шумная часть работы — чтение двадцати файлов, простыни вывода — остаётся в контексте субагента, а к вам приходит только вывод. Главный способ не забивать основной контекст разведкой.

Требует версии 2.1.212; до неё эта команда называлась `/fork`. При выключенном экране агентов недоступна.

```
/subtask найди все вызовы этого метода
/subtask найди, где формируется заголовок авторизации, и опиши цепочку
/subtask прочитай миграции за месяц и скажи, что менялось в схеме заказов
```

#### `/background [промпт]`

Увести текущую сессию в фон и освободить терминал. Алиас: `/bg`.

Ничего не копируется — в фон уезжает эта самая сессия, работа продолжается. С аргументом вы заодно даёте ей задание на дорогу. Вернуться потом — `claude attach` или экран `claude agents`; остановить — `/stop` или `claude stop <id>`.

```
/background
/bg догони сборку и почини линтер
```

#### `/rename [имя]`

Переименовать сессию. Алиас: `/name` **[нет в документации]**.

Имя видно в строке ввода, в списке `/resume` и в заголовке вкладки терминала. Без аргумента оно генерируется по теме разговора.

С введённым именем происходит три вещи: управляющие и невидимые символы заменяются пробелами, длина обрезается до двухсот знаков, а если после очистки не осталось ничего, имя отклоняется как пустое. Если такое имя уже занято другой живой сессией на этой машине, применится его вариант — не ошибка, просто имя окажется слегка другим.

Заголовок терминала меняется, если включено `terminalTitleFromRename` (по умолчанию да); совсем запретить трогать заголовок можно переменной `CLAUDE_CODE_DISABLE_TERMINAL_TITLE`.

```
/rename
/rename рефакторинг оплаты
```

#### `/cd <путь>`

Перевести сессию в другую рабочую папку.

Настройки, хуки, MCP-серверы, навыки и агенты новой папки начинают действовать сразу, а не после перезапуска, и блок `env` новой папки накладывается поверх старого. Этим `/cd` отличается от `/add-dir`, который даёт доступ к файлам, но не к конфигурации.

```
/cd ../backend
```

#### `/recap`

Сжать всю сессию в одну строку-резюме — быстро вспомнить, о чём шла речь.

```
/recap
```

#### `/btw [вопрос]`

Задать короткий сторонний вопрос, не засоряя основной контекст: ответ не подмешивается в дальнейшую работу.

Без вопроса открывает ваши прошлые сторонние вопросы, чтобы полистать ответы; до версии 2.1.212 вопрос был обязателен.

```
/btw чем grpc-web отличается от grpc
/btw
```

#### `/export [файл]`

Выгрузить разговор в файл или буфер обмена.

Без аргумента весь разговор уходит в буфер, с аргументом пишется в файл; `~` раскрывается. Формат текстовый, с разметкой ролей: это транскрипт для человека или для передачи в другой инструмент, а не машинный формат для импорта обратно.

```
/export
/export ~/logs/session.md
/export ./docs/decision.md
```

#### `/copy [N]`

Скопировать в буфер один ответ: без аргумента последний, с числом — N-й с конца.

Считаются ответы ассистента, а не строки на экране, поэтому `/copy 2` — это «предпоследний ответ». Малоизвестное: **если в ответе есть блоки кода, открывается выбор** — можно взять отдельный блок, а не всё сообщение. И прямо там клавиша `w` пишет выбранное в файл вместо буфера обмена; по SSH, где буфер бесполезен, это единственный рабочий способ.

```
/copy
/copy 2
```

#### `/stop`

Остановить текущую фоновую сессию. Транскрипт и рабочая копия сохраняются.

```
/stop
```

#### `/exit`

Выйти из CLI. Алиас: `/quit`. В фоновой сессии — отсоединиться, сама сессия продолжит работать.

```
/exit
```

### Контекст и память

#### `/context [all]`

Показать цветной сеткой, чем заполнен контекст, плюс советы, что можно выгрузить. Аргумент `all` разворачивает подробности: какие именно файлы и сколько занимают.

Каждая клетка сетки — кусок контекстного окна, раскрашенный по источнику. Смысл не в красоте: источники ведут себя по-разному, и лечатся они разным.

| Что показывает | Откуда берётся | Чем уменьшается |
|---|---|---|
| Системный промпт | сам Claude Code | почти ничем; `--bare` и `--restricted` урезают |
| Описания инструментов | встроенные плюс MCP-серверы | отключить ненужные серверы |
| Листинг навыков | описания всех доступных навыков | `skillOverrides`, `skillListingBudgetFraction` |
| Файлы памяти | `CLAUDE.md` и автопамять | сократить или исключить через `claudeMdExcludes` |
| История разговора | ваши сообщения и ответы | `/compact`, `/clear` |
| Прочитанные файлы и вывод команд | инструменты | `/clear`, а разведку отдать в `/subtask` |

Практическая ценность именно в `all`: почти всегда находится один-два файла или один разговорчивый MCP-сервер, съевшие больше, чем вся полезная работа.

Дальше развилка. Распухла история — `/compact`. Распухли прочитанные файлы — `/clear` и начать заново. Распухли описания инструментов и навыков — это лечится настройками, а не командами: в следующей сессии контекст будет ровно таким же раздутым.

```
/context                                # чем занят контекст прямо сейчас
/context all                            # то же, с разбивкой по каждому файлу
```

#### `/compact [инструкции]`

Сжать историю разговора в резюме, освободив место. Аргумент — не флаг и не фильтр, а инструкция составителю резюме: чему уделить внимание, что нельзя потерять.

Сжатие — это потеря. Резюме пишет модель, оно неизбежно короче оригинала, и всё, что не попало в акцент, воспроизводится приблизительно или пропадает. Осмысленный аргумент — не вежливость, а способ управлять тем, что именно вы согласны потерять.

Само по себе сжатие — дорогой запрос: в него уходит весь контекст целиком. `/clear` не стоит ничего. Если разговор вам больше не нужен, вторая команда дешевле первой на весь объём окна.

Порогом, при котором контекст ужимается сам, управляет `/autocompact`.

```
/compact                                # сжать историю как получится
/compact сохрани решения по схеме БД     # сжать, но не потерять эту линию
/compact сохрани принятые решения по схеме и почему отвергли триггеры
/compact оставь только то, что относится к модулю оплаты
```

#### `/autocompact [auto|<токены>]`

Настроить, при каком заполнении контекст начнёт ужиматься сам. Команда появилась в 2.1.221.

| Аргумент | Что делает |
|---|---|
| без аргумента | Показать текущее значение |
| `auto` | Порог подбирается автоматически |
| число от 100000 до 1000000 | Сжимать по достижении этого числа токенов |

Значения вне диапазона не принимаются. Постоянный эквивалент — ключ `autoCompactWindow`, выключается автосжатие целиком через `autoCompactEnabled: false`, есть и флаг запуска `--autocompact` с теми же значениями. Отдельная настройка `precomputeCompactionEnabled` готовит сжатие заранее, пока идёт обычная работа, — когда порог будет достигнут, пауза окажется короче; работает только при включённом автосжатии.

```
/autocompact                            # посмотреть текущий порог
/autocompact auto                       # пусть подбирается сам
/autocompact 400000                     # сжимать, дойдя до 400k токенов
```

#### `/memory`

Открыть на редактирование файлы памяти и управлять ими.

Что именно из них загружается, показывает `/context`, а привести их в порядок умеет `/doctor`: он вычищает дубли, переносит редко нужное в отдельные файлы, подгружаемые по требованию, и вырезает то, что агент и так выведет из кода.

```
/memory                                 # открыть файлы памяти на правку
```

#### `/pause-memory`

Приостановить автопамять на сессию. Алиасы: `/memory-pause`, `/toggle-memory`. **[выключена]** — в сборке 2.1.251 команда зарегистрирована, но не работает.

```
/pause-memory
```

#### `/init`

Создать `CLAUDE.md`: агент осмотрит репозиторий и опишет его структуру и команды. **[Навык]**

`CLAUDE.md` — это файл инструкций, который подмешивается в контекст каждой сессии.

Малоизвестная переменная: `CLAUDE_CODE_NEW_INIT=1` включает интерактивный вариант, который проводит не только по инструкциям проекта, но и по навыкам, хукам и личным файлам памяти. И если в папке найдётся конфигурация другого кодинг-агента, которую умеет переносить `/import`, вам предложат её забрать.

```
/init                                   # сгенерировать CLAUDE.md по репозиторию
```

```bash
CLAUDE_CODE_NEW_INIT=1 claude    # интерактивный /init со скилами и хуками
```

#### `/add-dir <путь>`

Добавить ещё одну рабочую директорию, чтобы агент видел файлы за пределами папки проекта.

Важная тонкость: он даёт доступ **к файлам**, а не к конфигурации — хуки и настройки той папки не подхватываются. Единственное исключение — навыки и команды: их из добавленной папки берут. Перевести сессию в другую папку целиком, вместе с её настройками и хуками, — это `/cd`, а не `/add-dir`.

```
/add-dir ../shared-protocol             # пустить агента в соседний репозиторий
```

#### `/rewind`

Откатить код и/или разговор к контрольной точке, либо сжать кусок разговора. Алиасы: `/checkpoint`, `/undo`.

Первое, что надо знать: **команда работает не всегда.** Копии файлов снимаются перед правкой, только если включено `fileCheckpointingEnabled`. Выключено — восстанавливать нечего.

Второе: меню открывается не только командой. **Двойной `Esc` на пустой строке ввода** делает то же самое. Если в строке есть текст, двойной `Esc` его очищает — поэтому сначала очистите строку.

В меню шесть пунктов, и половина из них не про откат:

| Пункт | Что делает |
|---|---|
| Восстановить код и разговор | Полный возврат в состояние на момент точки |
| Восстановить разговор | История вернётся, файлы останутся как есть |
| Восстановить код | Файлы вернутся, разговор останется целиком |
| Сжать отсюда | Сжать разговор от выбранной точки и дальше |
| Сжать до этого места | Сжать всё, что было до выбранной точки |
| Отмена | Ничего не делать |

Два пункта про сжатие — это, по сути, прицельный `/compact`: освободить контекст, но не весь разговор целиком, а конкретный его кусок. В строке есть необязательное поле для указаний, чему уделить внимание при сжатии, а на месте сжатого остаётся пометка.

Из откатов чаще всего нужен «восстановить код»: правки пошли не туда, но обсуждение, из которого они выросли, ценно и терять его глупо.

**Границы, которые стоит знать до того, как они понадобятся.** Хранится сто последних контрольных точек, а вместе с сессией они удаляются через тридцать дней — тот же `cleanupPeriodDays`. Не восстанавливается: то, что сделали запущенные команды оболочки, большинство правок субагентов, изменения, внесённые снаружи, и всё, что лежит по символическим и жёстким ссылкам. То есть снесённая миграцией база не вернётся, `git reset` не отменится, установленные пакеты останутся. Это отмена последних правок, а не система контроля версий и не замена коммитам.

```
/rewind                                 # меню отката и сжатия
```

### Модель и производительность

#### `/model [модель]`

Сменить модель и запомнить выбор. Без аргумента открывается список доступного.

| Что передали | Что произойдёт |
|---|---|
| ничего | Откроется список доступных моделей |
| алиас семейства — `opus`, `sonnet`, `haiku`, `fable` | Возьмётся текущая модель этого семейства |
| `default` | Модель по умолчанию для вашего тарифа |
| `best` | Fable 5 там, где у организации есть доступ, иначе новейший Opus |
| `opusplan` | Планирование на Opus, выполнение на Sonnet |
| `opus[1m]`, `sonnet[1m]` | Та же модель с контекстным окном на миллион токенов |
| префикс версии, например `opus-5` | Разрешится в конкретную модель |
| полный идентификатор | Возьмётся ровно она |

Выбор запоминается и переживает перезапуск — этим `/model` отличается от переменной `ANTHROPIC_DEFAULT_MODEL`, которую он перекрывает.

**Расклад на август 2026.** Актуальные модели — Opus 5, Sonnet 5, Fable 5 и Haiku 4.5. Пятого Haiku не существует: алиас `haiku` по-прежнему ведёт на 4.5, и это регулярно вводит людей в заблуждение при чтении примеров с `fallbackModel`.

Что стоит за алиасом, **зависит от провайдера**, и это неочевидная деталь для тех, кто работает через облако. На собственном API `sonnet` — это Sonnet 5, на Amazon Bedrock и Google Cloud — Sonnet 4.5, на Microsoft Foundry `opus` — вообще Opus 4.6. Один и тот же конфиг на двух провайдерах даёт разные модели.

Настраивается всё это тремя способами. Что стоит за алиасами — переменными `ANTHROPIC_DEFAULT_OPUS_MODEL` и родственными (для `best` такой переменной нет). Сам список выбора — ключом `modelPicker`: туда дописываются свои строки с подписями, в том числе идентификаторы Bedrock и Vertex, а `replaceBuiltInOptions` заменяет встроенный список целиком. Сверху всё ограничивается корпоративным `availableModels`; с версии 2.1.205 алиас семейства при этом не отвергается, а разрешается в новейшую разрешённую модель.

Отдельно живёт `fallbackModel` — список моделей, на которые Claude Code переключится сам, если основная перегружена. Это не смена вашего выбора, а страховка на время недоступности.

```
/model                # выбрать из доступного списка
/model opus           # по алиасу
/model claude-opus-5  # по полному идентификатору
/model opusplan       # планировать на Opus, выполнять на Sonnet
```

#### `/effort [уровень|auto|status]`

Уровень усилий задаёт, сколько модель думает над ходом. Это не то же самое, что выбор модели: модель определяет, кто думает, усилия — сколько.

| Значение | Что происходит | Когда осмысленно |
|---|---|---|
| `low` | Минимум рассуждений, ответ почти сразу | Механические правки, переименования, вопросы с очевидным ответом |
| `medium` | Обычный режим | Повседневная работа |
| `high` | Заметно больше рассуждений перед действием | Задачи, где ошибка дороже ожидания |
| `xhigh` | Максимум рассуждений в обычном режиме | Проектирование, разбор запутанного дефекта |
| `max` | То же, с упором на полноту | Редко; перед необратимыми изменениями |
| `ultracode` | `xhigh` плюс постоянная оркестровка воркфлоу | Большие декомпозируемые работы, где стоимость не в приоритете |
| `auto` | Уровень подбирается под задачу | Значение по умолчанию, если вы не вмешивались |
| `status` | Ничего не меняет, показывает текущий уровень | — |

Четыре неочевидности.

**`max` нельзя сохранить в настройках.** Ключ `effortLevel` принимает только значения до `xhigh`. Максимум задаётся на сессию — командой или флагом `--effort max` — и намеренно не остаётся включённым навсегда. Так же устроен `ultracode`: команда и флаг работают, а из перечисленных в схеме значений его нет; постоянно он включается отдельным булевым ключом `ultracode`.

**Уровень запоминается по модели.** С версии 2.1.248 у каждой модели свой сохранённый уровень: переключились на другую — получите её настройку, а не вашу последнюю.

**Другие команды его перебивают.** `/code-review high` поднимает усилия на ход, `/code-review low` понижает, даже если сессия шла на `xhigh`.

**Слово `ultracode` работает прямо в тексте промпта** — по умолчанию его достаточно, чтобы включить оркестровку на один ход; отвечает за это `workflowKeywordTriggerEnabled`. Если сработало случайно, отменяется на месте сочетанием Alt+W (на macOS Option+W). Чтобы стартовать сразу с ним: `claude --effort ultracode`.

Ещё в 2.1.251 починили частный случай, на который легко наткнуться: Opus 5 отказывался работать с `xhigh` и `max`, если размышления выключены. Теперь в такой комбинации усилия просто отправляются как `high`.

```
/effort status     # какой уровень сейчас
/effort low        # дёшево и быстро
/effort xhigh      # глубокие рассуждения
/effort ultracode  # xhigh плюс постоянная оркестровка воркфлоу
/effort auto       # вернуть автоматический выбор
```

#### `/fast [on|off]`

Fast-режим: та же модель, но с ускоренным выводом.

Это не другая модель и не другой уровень усилий — это режим выдачи, и стоит он дороже. Ключи настроек рядом: `fastMode` включает его постоянно, а `fastModePerSessionOptIn` заставляет каждую сессию стартовать без него, даже если вы включали его в прошлый раз.

```
/fast on   # ускоренный вывод
/fast off  # обратно
```

#### `/brief`

Режим «только кратко»: максимально сжатые ответы без развёрнутых пояснений. Аргументов нет.

```
/brief  # отвечать максимально коротко
```

#### `/advisor [модель|off]`

Советчик: более сильная модель подсказывает основному агенту в ключевые моменты.

Вторая модель вмешивается не постоянно, а в ключевых точках — когда основной агент принимает решение, где ошибка дорого стоит. Аргумент — алиас или полный идентификатор модели; `off` выключает. Без аргумента открывается выбор. Есть и флаг запуска `--advisor <модель>`, которого, кстати, нет в выводе `claude --help`.

```
/advisor opus  # подсказки от Opus
/advisor off   # выключить советчика
```

#### `/plan [open|share|описание]`

Режим планирования: агент читает, анализирует и предлагает план, но ничего не меняет — правки файлов и опасные команды недоступны. Выход — принятие плана; после него сессия возвращается в обычный режим и начинает его выполнять.

| Аргумент | Что делает |
|---|---|
| ничего | Просто войти в режим планирования |
| текст задачи | Войти и сразу начать планировать это |
| `open` | Открыть файл текущего плана сессии |
| `share` | Опубликовать план отдельной страницей, которой можно поделиться |

Файлы планов лежат в `~/.claude/plans/`, если не задан `plansDirectory` — им их переводят в репозиторий проекта, чтобы план обсуждался и версионировался вместе с кодом.

В диалоге принятия плана есть опция «очистить контекст»: план остаётся, а вся разведка, на которой он построен, выбрасывается. Показывается она только при `showClearContextOnPlanAccept`, по умолчанию выключена, и на длинных задачах это одна из самых полезных настроек — исполнение начинается с чистым окном.

Режим доступен и с самого старта: `claude --permission-mode plan`. И отдельно стоит знать, что авто-режим по умолчанию действует и внутри планирования; отключается это ключом `useAutoModeDuringPlan`.

```
/plan                                    # войти в режим планирования
/plan вынести оплату в отдельный сервис  # войти сразу с задачей
/plan open                               # открыть текущий план сессии
/plan share                              # поделиться планом
```

#### `/goal [условие|clear]`

Задать условие, при котором работа считается законченной; агент продолжает сам, пока оно не выполнится, вместо того чтобы останавливаться после каждого хода.

| Аргумент | Что делает |
|---|---|
| текст условия | Задать цель |
| `clear`, `stop`, `off`, `reset`, `none`, `cancel` | Снять активную цель — любое из шести слов |
| ничего | Показать текущую или последнюю достигнутую цель |

Условие должно быть проверяемым — команда, состояние файла, признак в выводе. Расплывчатое «пока не станет хорошо» превращается в бесконечную работу, потому что проверить его нечем.

Отдельная статья расходов, о которой мало кто думает: пока цель активна, агент периодически просыпается и проверяет застрявшую фоновую работу, и каждая такая проверка — полноценный ход с полным контекстом. Частоту задаёт `CLAUDE_CODE_GOAL_CHECKIN_MINUTES`, ноль отключает проверки совсем; с версии 2.1.246 их не больше трёх на цель.

```
/goal пока все тесты не станут зелёными    # работать до выполнения условия
/goal пока `npm test` не проходит целиком
/goal пока в файле не останется ни одного вызова устаревшего клиента
/goal                                      # показать текущую цель
/goal clear                                # снять цель
```

### Код-ревью и качество

Первые три команды смотрят на один и тот же дифф и потому легко путаются, четвёртая вообще ничего не анализирует:

| Команда | На что смотрит |
|---|---|
| `/code-review` | ошибки корректности и чистота кода; правит только с `--fix` |
| `/simplify` | только чистота — и сразу применяет найденное |
| `/security-review` | только уязвимости в изменениях ветки |
| `/diff` | ничего не ищет, просто показывает изменения |

#### `/code-review [уровень|ultra] [--fix] [--comment] [--post|--no-post] [цель]`

Ревью диффа на ошибки и упрощения **[Навык]**. Алиас: `/review`.

Самая настраиваемая из встроенных команд: уровень усилий, четыре флага, цель ревью и отдельный облачный режим — и каждое разбирается по своим правилам. Полная форма — `/code-review [low|medium|high|xhigh|max|ultra] [--fix] [--comment] [--post|--no-post] [<PR#>|<ветка>|<путь>|<заметка>]`, и всё в ней необязательно: голое `/code-review` — валидный вызов.

**Что она ищет.** Две разные вещи. Ошибки корректности: перевёрнутое условие, off-by-one, разыменование `null`, забытый `await`, снятая проверка, проглоченная в `catch` ошибка, сломанные вызывающие изменённой функции, классические грабли конкретного языка. И чистоту: новый код, повторяющий уже существующее в репозитории; лишнюю сложность и мёртвый код; лишнюю работу вроде повторных вычислений или последовательно выполненных независимых операций; «не тот уровень решения», когда заплатка ставится там, где надо было чинить общий механизм; прямые нарушения правил из вашего `CLAUDE.md`.

Ошибки корректности всегда важнее находок про чистоту: если находок больше лимита уровня, режут сначала вторые. Само ревью ничего не правит, пока не передан `--fix`.

**Где оно выполняется.** Обычно фоновым агентом: сессия не блокируется, находки приходят отдельным сообщением. В трёх случаях ревью занимает сессию целиком: если вы запустили его повторно, пока предыдущее ещё идёт; если вы в неинтерактивном режиме `-p` или в SDK; и если выставлена переменная `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1`, которая вообще отключает фоновые задачи.

**Кто может его запустить.** Не только вы. На просьбу «посмотри мои изменения» обычным текстом агент запустит ревью сам, и запланированная задача с `/code-review` в промпте тоже сработает. Если это мешает — оставить команду набираемой, но запретить агенту и расписанию её запускать:

```json title=".claude/settings.json"
{
  "skillOverrides": { "code-review": "user-invocable-only" }
}
```

Облачный режим — исключение: **`ultra` агент не запускает никогда**, ни сам, ни по расписанию.

**Порядок аргументов.** Три правила, из-за которых вызов срабатывает не так, как ожидалось:

1. `ultra` понимается только первым словом. `/code-review ultra --fix` — облачное ревью, а `/code-review --fix ultra` — обычное локальное, в котором слово `ultra` понято как цель.
2. Уровень — первое слово после того, как из строки убраны флаги. Поэтому `/code-review --fix high` работает, и уровень будет `high`.
3. Флаги можно ставить где угодно: в начале, в конце, между уровнем и целью. Единственное исключение — правило 1.

И четвёртое, отдельное: **эта команда «съедает» команду, набранную следом.** Обычно несколько навыков стыкуются в одном сообщении, и `/write-tests /fix-issue 123` загрузит оба. Но `/code-review /fix-issue 123` с версии 2.1.218 понимает `/fix-issue 123` как текст цели, а не как вторую команду. До 2.1.218 было наоборот.

**Уровни усилий.**

| Уровень | Как ищет | Находок | Когда брать |
|---|---|---|---|
| `low` | Один проход по диффу: без субагентов, без чтения файлов целиком, без перепроверки находок; тестовые файлы не смотрит | до 4, на части моделей до 8 | Быстрая дешёвая вычитка перед коммитом |
| `medium` | Восемь независимых углов поиска — три на корректность, три на чистоту, по одному на уровень решения и на правила `CLAUDE.md`, — затем проверка каждой находки | до 8 | Обычное ревью |
| `high` | Те же восемь углов, но проверка смещена в полноту: находка остаётся, если её не смогли опровергнуть | до 10 | Когда пропущенная ошибка дороже лишнего шума |
| `xhigh` | Десять углов по восемь кандидатов, проверка и отдельный финальный проход «что пропустили» | до 15 | Крупный или рискованный дифф |
| `max` | То же, что `xhigh`, с максимальным упором на полноту | до 15 | Перед релизом, миграцией — всем, что тяжело откатить |
| `ultra` | Не уровень, а отдельный режим: мульти-агентное ревью в облаке | — | Целый pull request, который хочется проверить чужими глазами |

Числа в этой таблице сняты с бинарника: официальная документация описывает уровни качественно — «низкие возвращают самые уверенные находки, высокие расширяют охват и могут включать менее уверенные», — а сколько там углов поиска и какой потолок находок, не публикует нигде.

Точный конвейер зависит от модели сессии, поэтому таблица про смысл уровней, а не про гарантированное число агентов. На Opus 5 `medium` и `high` сейчас сводятся к одному внимательному проходу с лимитом в пятнадцать находок, а различия начинаются с `xhigh`; на Sonnet 5 на уровнях `high`, `xhigh` и `max` число поисковых агентов подбирается по размеру диффа — от двух до восьми.

**Запоминание уровня.** Если уровень не указан, берётся тот, который вы набрали в прошлый раз: он живёт между сессиями, и в начале отчёта об этом скажут строкой вида «использую high, уровень с прошлого раза». Два исключения: уровень, переданный в неинтерактивном запуске `-p`, ничего не запоминает, а `ultra` запомненный уровень и не читает, и не меняет. Если вы не набирали ни разу, берётся уровень усилий текущей сессии. Набранный уровень заодно задаёт усилия модели на ход, в том числе вниз: `/code-review low` в сессии на `xhigh` их понизит.

Опечатка вызов не ломает: на `/code-review higher` вы получите предупреждение, что значение не распознано, и прошлый или дефолтный уровень. Сокращение `med` принимается как `medium`.

**Флаги.**

| Флаг | Где работает | Что делает |
|---|---|---|
| `--fix` | локально и с `ultra` | После отчёта применить находки к рабочему дереву |
| `--comment` | локально, если цель — pull request на GitHub | Запостить каждую находку отдельным комментарием к строке |
| `--post` | только `ultra`, репозиторий на github.com | Запостить итог одним обычным комментарием от вашего аккаунта |
| `--no-post` | только `ultra` | Убрать предложение постить из окна запуска — это и так поведение по умолчанию |

`--fix` правит найденное прямо в рабочем дереве, и ошибки, и чистоту. Находка пропускается, если правка меняет задуманное поведение, требует изменений далеко за пределами просмотренного диффа или выглядит ложным срабатыванием; в конце вам скажут, что пропустили и почему. С `ultra` правки применяются локально в тот момент, когда облако вернёт результат.

`--comment` требует, чтобы целью был pull request. Если цель не он, флаг игнорируется, находки просто печатаются, и агент об этом скажет. Комментарии уходят через GitHub-интеграцию, а если её в сессии нет — через `gh api`.

`--post` — не то же самое, что `--comment`: один общий комментарий вместо замечаний по строкам, и только для облачного ревью. В интерактивной сессии окно запуска всё равно спросит подтверждение, в неинтерактивном режиме постит сразу по флагу. Переданный в обычное локальное ревью, он игнорируется — вам напомнят, что там постит `--comment`.

`--no-post` нужен, чтобы вообще не видеть предложения постить. Передавать оба сразу бессмысленно: команда читает только `--post`, так что `--post --no-post` всё равно предложит запостить.

**Цель ревью.** Без цели ревьюится текущая работа: коммиты ветки над её upstream плюс незакоммиченные изменения. Поэтому команда осмысленна и до коммита.

В локальном ревью цель передаётся модели строкой, и она сама решает, что это: номер pull request, имя ветки, путь к файлу или папке — или просто пожелание, куда смотреть в первую очередь. В `ultra` цель разбирается строго:

| Что передали | Что произойдёт |
|---|---|
| ничего | Ревьюится текущая ветка против базовой |
| `1234`, `#1234`, `PR 1234`, ссылка на `/pull/1234` | Загружается и ревьюится этот pull request |
| имя существующей ветки | Берётся как базовая, дифф считается против неё |
| всё остальное | Записывается как заметка к ревью: облачный агент её не видит и всё равно ревьюит дифф ветки, но когда находки вернутся, их свяжут с вашей просьбой |

**Ревью в облаке: что нужно, сколько стоит и где потолок.** `ultra` запускает фоновый агент в Claude Code в вебе: он клонирует репозиторий в облачную песочницу, гоняет по диффу мульти-агентный поиск и присылает находки уведомлением в вашу сессию. Занимает минуты, всё это время можно работать дальше.

Требуются git-репозиторий и GitHub-remote, аккаунт claude.ai с подключённым GitHub, а для приватного репозитория — установленное на владельца приложение Claude. Недоступно на сторонних провайдерах, при отключённых необязательных запросах, в организациях с нулевым хранением данных и при запрете со стороны организации. Важная деталь: когда режим недоступен, **`/code-review ultra` не падает, а тихо выполняет обычное локальное ревью** — если вы ждали облачного, стоит убедиться, что оно действительно запустилось.

Потолок диффа — до пятисот изменённых файлов и восьми тысяч изменённых строк. Слишком большой pull request отклоняется, и в отказе называются действующие лимиты, размер вашего диффа и самые крупные файлы; пустой дифф тоже отклоняется.

Цена: на Pro и Max по три бесплатных запуска, дальше — из кредитов, обычно от пяти до двадцати пяти долларов за ревью в зависимости от размера изменений. Запуск считается с момента старта облачной сессии: остановленное или упавшее ревью бесплатный запуск всё равно потратит, а платное списывается только за отработанную часть. Если кредиты не подключены, платный запуск просто блокируется.

**Из CI.** С версии 2.1.218 облачное ревью запускается неинтерактивно:

```bash
claude -p '/code-review ultra'
```

Команда стартует ревью, печатает ссылку для отслеживания и не ждёт результата. Но если ревью должно списать кредиты, запуск остановится: подтверждение оплаты требует интерактивной сессии. Для такого случая есть отдельная подкоманда, сам факт запуска которой считается вашим согласием на списание:

```bash
claude ultrareview                       # облачное ревью текущей ветки
claude ultrareview 1234 --post           # ревью PR, итог комментарием в него
claude ultrareview --json                # сырые находки вместо отчёта
claude ultrareview dev --timeout 60      # против ветки dev, ждать до часа
```

Код выхода — 0, если ревью завершилось (с находками или без), и 1, если запустить его не удалось. `--timeout` по умолчанию тридцать минут.

Канонической формой считается `/code-review ultra`; `/ultrareview` — её алиас, доступный не всем аккаунтам, и вся возможность помечена как исследовательская. В статьях часто пишут наоборот, будто основная команда — `/ultrareview`.

**В GitHub Actions.** У ревью есть отдельная жизнь в CI, и там оно настраивается не флагами, а файлом. В корне репозитория кладётся `REVIEW.md`, который задаёт правила: какие пути и ветки пропускать, какие категории находок не показывать, что считать важным, как вести себя при повторном ревью одного и того же pull request.

Находки делятся на три уровня: важные, придирки и уже существовавшие в коде до этих изменений. Нарушения ваших правил из `CLAUDE.md` попадают в придирки. Проверка всегда завершается нейтральным статусом и поэтому никогда не блокирует слияние сама — но последней строкой печатает счётчик находок в JSON вида `{"normal": 2, "nit": 1, "pre_existing": 0}`, по которому вы можете поставить собственный барьер в своём же пайплайне.

```
/code-review                                   # текущие изменения, уровень как в прошлый раз
/code-review low                               # быстрая вычитка перед коммитом
/code-review high                              # и заодно запомнить high как уровень по умолчанию
/code-review --fix                             # найти и сразу починить
/code-review high --fix                        # глубже и сразу починить найденное
/code-review medium --comment 1234             # ревью PR 1234 с комментариями прямо в нём
/code-review xhigh applications/backend/src    # только эта папка, максимально дотошно
/code-review max dev                           # дифф текущей ветки против dev
/code-review higher                            # опечатка: предупредит и возьмёт прошлый уровень
/code-review ultra                             # облачное ревью текущей ветки
/code-review ultra 1234 --fix                  # облачное ревью PR, находки применить локально
/code-review ultra 1234 --post                 # облачное ревью PR, итог комментарием
/code-review ultra посмотри обработку ошибок   # ветка плюс заметка, куда смотреть
```

#### `/simplify [цель]`

Найти в изменённом коде упрощения и сразу их применить **[Навык]**.

Смотрит на тот же дифф, что и `/code-review`, но ищет только чистоту, и делает это четырьмя параллельными агентами: переиспользование уже написанных помощников, упрощения, эффективность и тот ли это уровень абстракции. Ошибок он не ищет принципиально — это разделение труда, а не недоработка. И, в отличие от ревью, **сразу применяет** найденное. Аргумент — необязательная цель: путь, папка или номер pull request.

Историческая ловушка: до версии 2.1.147 `/simplify` называлась нынешняя `/code-review` и правки применяла по умолчанию. Старый скрипт, который звал `/simplify` ради поиска ошибок, сегодня делает совсем другое.

```
/simplify                                # весь изменённый код
/simplify src/payments                   # только эта папка
/simplify src/api/handlers               # или эта
/simplify 1234                           # упрощения в этом pull request
```

#### `/security-review`

Проверить изменения ветки на уязвимости. Аргументов нет.

Ищет инъекции, проблемы авторизации и аутентификации, утечки данных, небезопасную работу с секретами и вводом.

Единственное требование, о которое спотыкаются: **нужен remote с именем `origin`** — дифф считается против его основной ветки. Без него команда падает с ошибкой git про неоднозначный аргумент, и выглядит это загадочно.

```
/security-review                         # уязвимости в изменениях ветки
```

#### `/diff`

Интерактивно посмотреть незакоммиченные изменения. Аргументов нет.

Ничего не анализирует, это просмотрщик: незакоммиченные изменения и, что полезнее, дифф по каждому ходу агента отдельно. Штука, которой стоит пользоваться до `/rewind`, а не после.

```
/diff                                    # посмотреть незакоммиченное
```

### Разработка и рабочие процессы

`/run` и `/verify` постоянно путают: обе про «проверить вживую», но отвечают на разные вопросы.

| Команда | На какой вопрос отвечает |
|---|---|
| `/verify` | Делает ли конкретное изменение то, что задумано |
| `/run` | Как ведёт себя приложение целиком, если поднять его как обычно |

#### `/run`

Запустить приложение проекта и проверить изменение вживую, а не только тестами. **[Навык]**

Речь про приложение целиком: поднять его так, как оно поднимается в этом проекте, и дать посмотреть. Чтобы он знал, как именно, нужен навык запуска — его создаёт `/run-skill-generator`, один раз на проект. Без него `/run` попытается угадать по типу проекта и на нестандартной сборке угадает плохо.

```
/run  # запустить приложение и посмотреть глазами
```

#### `/verify`

Подтвердить, что изменение работает: собрать, запустить, понаблюдать поведение. **[Навык]**

Логика простая: ревью проверяет, что дифф правильно **читается**, `/verify` — что он правильно **работает**.

С версии 2.1.200 команда умеет записать найденный рецепт проверки в собственный навык `.claude/skills/verify/SKILL.md`, и тогда в корне репозитория он заменяет встроенный — то есть один раз разобрались, как проверять этот проект, и дальше это работает у всех.

Важное изменение: **с версии 2.1.215 `/verify` запускается только вами.** Раньше агент мог позвать его сам. То же случилось с `/deep-research` в 2.1.218. Если вы читали статью, где написано, что агент проверит себя сам, — она устарела.

```
/verify  # собрать, запустить, убедиться что работает
```

#### `/run-skill-generator`

Создать навык, умеющий запускать приложение этого проекта, — на нём потом работает `/run`. **[Навык]**

Делается один раз на проект.

```
/run-skill-generator  # научить проект команде /run
```

#### `/batch <инструкция>`

Спланировать масштабную правку и выполнить её параллельно в 5–30 изолированных рабочих копиях, каждая открывает свой pull request. **[Навык]**

Самая тяжёлая из встроенных команд и единственная, которая по умолчанию порождает десятки агентов. Инструкция сначала превращается в план — список конкретных мест, которые надо править, — а потом под каждое место запускается свой агент в своей изолированной рабочей копии git, и каждый открывает отдельный pull request.

Ключевое здесь — изоляция. Агенты правят файлы параллельно, и без отдельных рабочих копий они бы наступали друг другу на ноги. Отсюда требования: git-репозиторий, чистое дерево и настроенный `gh`, иначе pull request открывать нечем.

Число агентов — от пяти до тридцати, и оно выводится из плана, а не задаётся вами: сколько нашлось мест, столько и агентов, в пределах потолка. Если план получается на два места, веер не нужен, и команда об этом скажет.

Хорошая инструкция — та, где границы каждого места очевидны и правки не связаны между собой. Плохая — «отрефактори проект»: план получится из размытых пунктов, а тридцать агентов независимо придумают тридцать разных архитектур.

На поведение веера влияют настройки `worktree`: `symlinkDirectories` спасает диск, если в проекте тяжёлые зависимости, `sparsePaths` ускоряет выгрузку в больших монорепозиториях, `baseRef` определяет, ветвиться от удалённой основной ветки или от текущего локального состояния.

```
/batch переведи все контроллеры на новый клиент  # веер изолированных агентов, каждый со своим PR
/batch переведи все использования устаревшего http-клиента на новый
/batch добавь недостающие индексы по списку из отчёта планировщика
/batch разнеси общие DTO по модулям, которые их используют
```

#### `/debug [описание]`

Включить отладочные логи на сессию и помочь разобраться с проблемой. **[Навык]**

Описание необязательное — с ним вы сразу говорите, что именно ловите.

```
/debug                                       # включить отладочные логи
/debug падает только на CI, локально зелено  # то же плюс описание проблемы
```

#### `/fewer-permission-prompts`

Просмотреть транскрипты, найти частые безопасные вызовы и собрать из них список разрешений. **[Навык]**

```
/fewer-permission-prompts  # собрать список разрешений из истории
```

#### `/commit [пожелания]`

Собрать коммит: посмотреть статус и дифф, написать сообщение по принятому формату. **[Навык]**

Аргумент — не флаги, а пожелания обычным текстом; это верно и для `/pr`. Пожелания влияют на то, что попадёт в коммит и как будет написано сообщение. Формат сообщения выводится из истории коммитов этого репозитория, а не из общих правил.

Что попадёт в сообщение коммита в качестве атрибуции, задаётся объектом `attribution` с полями `commit` и `pr`, где пустая строка убирает её совсем. Выключить встроенные инструкции про коммиты целиком можно через `includeGitInstructions: false` — тогда агент будет пользоваться только вашими правилами.

```
/commit  # коммит с сообщением по формату проекта
/commit только изменения в схеме, остальное не трогай
/commit одним коммитом, без упоминания рефакторинга тестов
/commit раздели на два: сначала схема, потом код
```

#### `/pr [пожелания]`

Открыть pull request: завести ветку, запушить, создать описание через `gh`. **[Навык]**

Ветка заводится, если вы ещё на основной. Пожеланиями задаются черновик, ревьюеры, форма описания.

```
/pr  # ветка, пуш, pull request с описанием
/pr черновиком, ревьюеров не назначай
/pr в описании отдельным разделом перечисли, что осталось за кадром
```

#### `/commit-push-pr`

Все три шага одним заходом: коммит, пуш, pull request. **[Навык]**

У него есть особенность: **опасные флаги `git` и `gh` не одобряются автоматически.** `--force`, `--amend`, `--no-verify` всё равно спросят подтверждение, даже если у вас щедрые права. Сделано намеренно: цепочка из трёх шагов выполняется быстро, и человек не успевает заметить, что где-то в середине переписывается история.

```
/commit-push-pr  # все три шага сразу
```

#### `/update-config`

Поменять настройки: хуки, права, переменные окружения, — с правкой `settings.json` за вас. **[Навык]**

```
/update-config добавь хук на форматирование после правок
```

#### `/claude-code-docs [вопрос]`

Ответы про сам Claude Code: возможности, настройки, SDK, Claude API, Slack-приложение. **[Навык]**

```
/claude-code-docs как ограничить агенту доступ к папке
```

#### `/claude-in-chrome`

Разрешить работу в вашем Chrome: кликать, заполнять формы, читать консоль. **[Навык]**

```
/claude-in-chrome  # разрешить работу в браузере
```

#### `/plugin-types [папка]`

Сгенерировать типы входных данных подключённых MCP-инструментов.

```
/plugin-types ./my-plugin  # типы MCP-инструментов для плагина
```

#### `/workflow-authoring`

Справочник по написанию скриптов для воркфлоу. **[Навык]**

Сам запуск воркфлоу не разрешает.

```
/workflow-authoring  # как писать скрипты воркфлоу
```

#### `/claude-api [migrate|upgrade|prompt-audit|managed-agents-onboard|cost-optimize]`

Помощь по Claude API и SDK. **[Навык]** Единственная в этой группе команда с фиксированным набором аргументов.

| Аргумент | Что делает |
|---|---|
| без аргумента | Общая помощь по Claude API и SDK: параметры, стриминг, вызов инструментов, кэширование |
| `migrate` | Миграция кода на новую модель: что поменять в идентификаторах, параметрах и ожиданиях |
| `upgrade` | Переход на новую мажорную версию клиентской библиотеки; с 2.1.236 |
| `prompt-audit` | Найти в промптах, навыках и описаниях инструментов указания, написанные под старые модели, и предложить правку диффом; с 2.1.221 |
| `managed-agents-onboard` | Онбординг на серверные агенты с управляемой песочницей |
| `cost-optimize` | Разбор расходов на API и что с ними делать; с 2.1.247 |

Навык включается и сам, без команды: если в коде проекта есть импорт официальной библиотеки Anthropic, он активируется при задачах, которые её касаются.

```
/claude-api migrate       # миграция на новую модель
/claude-api prompt-audit  # найти в промптах инструкции под старые модели
```

#### `/deep-research <вопрос>`

Веер веб-поисков по множеству источников, проверка фактов и отчёт со ссылками. **[Воркфлоу]**

С версии 2.1.218 запускается только вами — раньше агент мог позвать её сам.

```
/deep-research чем отличаются подходы к идемпотентности в очередях
```

### Субагенты, фоновые задачи, автоматизация

#### `/list-agents`

Список субагентов, тиммейтов и других сессий, которым можно написать. Алиас: `/peers`.

```
/list-agents
```

#### `/agents`

Убрана. Теперь просто отвечает, что субагентов заводят файлами в `.claude/agents/`.

```
/agents
```

#### `/tasks`

Список и управление фоновыми задачами и запущенными процессами. Алиас: `/bashes`.

```
/tasks
```

#### `/daemon`

Управление фоновыми службами: ассистенты, запланированные задачи, удалённое управление.

```
/daemon
```

#### `/workflows`

История воркфлоу — запущенных и завершённых: прогресс, пауза, возобновление.

```
/workflows
```

#### `/loop [интервал] [промпт]`

Повторять промпт или команду по интервалу; без интервала темп выбирается сам. Алиас: `/proactive`. **[Навык]**

Команда принимает две вещи подряд: необязательный интервал и то, что повторять. Повторять можно и обычный промпт, и слэш-команду.

| Что передали | Что произойдёт |
|---|---|
| `<интервал> <промпт>` | Промпт выполняется по расписанию с этим интервалом |
| `<интервал> /команда` | То же, но повторяется слэш-команда |
| `<промпт>` | Интервал не задан: агент сам решает, когда проснуться в следующий раз |
| ничего | Автономный цикл: агент сам выбирает и задачу, и темп |

Интервал пишется человеческим сокращением: `5m`, `30m`, `1h`. Режим без интервала стоит понимать буквально: агент выбирает паузу исходя из того, чего ждёт. Сборку, которая идёт восемь минут, он будет ждать одной паузой, а не восемью проверками по минуте.

Ловушка ровно одна, зато дорогая: цикл, который просыпается каждую минуту, чтобы проверить фоновую задачу, почти всегда лишний. О завершении фоновой работы вам сообщат и так, а каждое пробуждение — это полноценный запрос со всем контекстом.

Списком того, что уже крутится, управляет `/loops` — но в этой сборке она выключена.

```
/loop 5m /code-review low               # каждые пять минут — быстрая вычитка
/loop 10m /code-review low
/loop 1h проверь, не появились ли новые упавшие тесты, и почини очевидное
/loop проверяй, не сломалась ли сборка  # без интервала: темп выберется сам
/loop следи за деплоем и скажи, когда закончится
```

#### `/loops`

Просмотр и удаление повторяющихся задач. **[выключена]** — в сборке 2.1.251 не работает.

Пока она выключена, что и с какой периодичностью крутится, показывает `/usage`.

```
/loops
```

#### `/schedule [описание]`

Создать, обновить или запустить запланированный удалённый агент по расписанию. Алиас: `/routines`. **[Навык]**

Отличие от `/loop` — место исполнения. `/loop` работает в вашей сессии, на вашей машине, пока она открыта. `/schedule` заводит задачу в облаке: она выполняется по расписанию независимо от того, включён ли ваш ноутбук.

Аргумент — описание словами, из которого выводится и расписание, и задача, и намерение: команда умеет не только создавать, но и обновлять, показывать, запускать вне очереди и удалять.

Требования те же, что у всего облачного: аккаунт claude.ai, подключённый GitHub, отсутствие запрета от организации. Окружение по умолчанию берётся из настройки `remote`.

Про расходы стоит помнить одно: запланированная задача просыпается и отправляет полный контекст, даже когда вы за компьютером и заняты своим. Это самая незаметная статья трат из всех.

```
/schedule каждое утро в 9 собирай отчёт по упавшим тестам
/schedule по понедельникам проверяй устаревшие зависимости и заводи задачу
/schedule покажи мои запланированные задачи
/schedule запусти утреннюю сводку прямо сейчас
/schedule удали задачу про зависимости
```

#### `/autofix-pr [промпт]`

Веб-сессия следит за pull request текущей ветки и сама пушит исправления.

```
/autofix-pr                              # следить за PR и чинить падения CI
/autofix-pr правь только линтер, логику не трогай
```

### Артефакты, документы и дизайн

Артефакт — опубликованная на claude.ai страница, которую можно открыть, покликать и дать посмотреть коллегам. Почти всё ниже — встроенные навыки, и **набор зависит от аккаунта**: часть включается только для определённых подписок и организаций.

В официальном справочнике команд из этой группы есть только `/artifacts`, `/design`, `/design-login` и `/design-sync`, остальные полтора десятка **[нет в документации]** — ни в чейнджлоге, ни в поиске, так что ниже то, что в сборке есть, а не то, что где-то обещано.

#### `/artifacts`

Список ваших опубликованных артефактов и тех, которыми поделились с вами.

```
/artifacts
```

#### `/prototype`

Превратить идею в работающий прототип: одна самодостаточная страница, которую можно покликать.

```
/prototype
```

#### `/doc`

Опубликовать рабочий документ, который правится прямо на странице.

```
/doc
```

#### `/plan-artifact`

Опубликовать план отдельной страницей, которой можно поделиться.

```
/plan-artifact
```

#### `/artifact-pr-review [номер или ссылка]`

Разбор pull request отдельной страницей: вывод, рекомендация, спорные места, слепые зоны.

```
/artifact-pr-review 1234
```

#### `/artifact-dashboard`

Дашборд по готовому шаблону.

```
/artifact-dashboard
```

#### `/artifact-report`

Отчёт по готовому шаблону.

```
/artifact-report
```

#### `/artifact-data-table`

Таблица данных по готовому шаблону.

```
/artifact-data-table
```

#### `/artifact-explainer`

Страница-объяснение по готовому шаблону.

```
/artifact-explainer
```

#### `/artifact-components`

Встроить в артефакт готовые переиспользуемые компоненты.

```
/artifact-components
```

#### `/artifact-design`

Правила оформления артефактов: вёрстка, типографика, тёмная тема.

```
/artifact-design
```

#### `/artifact-diagramming`

Как рисовать схемы, которые показывают реальный механизм.

```
/artifact-diagramming
```

#### `/artifact-capabilities`

Что опубликованная страница умеет в рантайме: читать ваши данные, запоминать действия посетителей, спрашивать Claude.

```
/artifact-capabilities
```

#### `/dataviz`

Правила оформления графиков и дашбордов: палитры, оси, подписи, доступность.

```
/dataviz
```

#### `/whiteboard`

Общая доска: вы рисуете, ответы приходят прямо на ней.

```
/whiteboard
```

#### `/whiteboard-mp`

То же, но живая доска, на которой рисует и агент, — рисуете вдвоём.

```
/whiteboard-mp
```

#### `/workshop`

Собирать дизайн вместе, по одному решению за раз.

```
/workshop
```

#### `/design [sync|login|consent|revoke|import|export|status|описание]`

Хаб Claude Design.

Официально это одна команда «с описанием дизайна», а `/design-login` и `/design-sync` — две отдельные. В бинарнике `/design` дополнительно понимает семь подкоманд, перечисленных в заголовке, и это нигде не описано. Появилась вся история в версии 2.1.234 и помечена как исследовательская — то есть меняться будет.

```
/design status                           # состояние подключения к Claude Design
/design login                            # войти
/design import                           # забрать дизайн-систему оттуда
/design export                           # выгрузить туда
/design revoke                           # отозвать доступ
```

#### `/design-sync [подсказка]`

Выгрузить дизайн-систему React-проекта на claude.ai/design.

```
/design-sync Acme DS
```

#### `/design-login`

Авторизовать доступ к дизайн-системе — тот самый, что нужен для выгрузки.

```
/design-login
```

### Конфигурация и интерфейс

#### `/config [ключ=значение]`

Панель настроек: без аргумента открывается панель со всеми настройками, которые можно менять из интерфейса. Алиас: `/settings`.

С аргументом настройка выставляется сразу, без панели: `/config theme=dark`. Полный список принимаемых ключей печатает `/config --help` — не угадывайте, он короче, чем список ключей файла настроек.

Прямая форма появилась в 2.1.181, именованные сокращения вроде `theme` и `model` — в 2.1.182. Работает она и в неинтерактивном режиме, и с телефона через удалённое управление, что делает её основным способом поменять настройку из скрипта.

Ограничение ровно одно, но неочевидное: **форма «ключ=значение» не может включить настройку, которая требует вашего подтверждения в панели.** Например `autoContinueAtUsageLimit` она умеет выключить, но не включить — включение сопровождается диалогом, а диалог в этой форме показать негде.

```
/config                  # открыть панель настроек
/config --help           # какие ключи принимает форма ключ=значение
/config theme=dark       # выставить сразу, без панели
/config model=sonnet     # то же для модели
/config thinking=false   # выключить размышления
```

#### `/permissions`

Правила разрешения и запрета инструментов, плюс вкладка авто-режима. Алиас: `/allowed-tools`.

```
/permissions   # правила прав доступа
```

#### `/theme`

Сменить цветовую тему интерфейса.

Кроме светлой и тёмной есть варианты для дальтоников, ANSI-варианты для терминалов со своей палитрой и **`auto`, подстраивающаяся под фон терминала.** Свои темы кладутся в `~/.claude/themes/` или приходят из плагинов; прямо в выборе есть пункт создания новой.

```
/theme   # выбрать тему
```

#### `/keybindings`

Открыть или создать файл горячих клавиш.

```
/keybindings   # свои горячие клавиши
```

#### `/terminal-setup`

Настроить сочетания терминала — например Shift+Enter для переноса строки.

```
/terminal-setup   # Shift+Enter и прочие сочетания терминала
```

#### `/statusline`

Настроить строку состояния: своим скриптом или сгенерировать из вашего shell-промпта.

```
/statusline   # настроить строку состояния
```

#### `/voice [hold|tap|off]`

Голосовой ввод.

| Что передали | Что произойдёт |
|---|---|
| `hold` | Говорить с зажатой кнопкой |
| `tap` | Нажал — говоришь, нажал — отправил |
| `off` | Выключить голосовой ввод |

```
/voice hold   # говорить с зажатой кнопкой
/voice tap    # нажал — говоришь, нажал — отправил
/voice off    # выключить голосовой ввод
```

#### `/tui [default|fullscreen]`

Рендерер интерфейса: `fullscreen` — полноэкранный, без мерцания, `default` — обратно к обычному.

```
/tui fullscreen   # полноэкранный рендерер без мерцания
/tui default      # обратно
```

#### `/color [цвет|default]`

Цвет строки промпта для текущей сессии. Это не тема, а именно цвет строки ввода; удобно, когда открыто четыре терминала и надо не перепутать.

| Что передали | Что произойдёт |
|---|---|
| цвет из палитры | Строка промпта красится в него до конца сессии |
| ничего | **Цвет выбирается случайно** — это не ошибка, это задумано |
| `default` | Сброс к обычному цвету |

Палитра фиксированная: `red`, `blue`, `green`, `yellow`, `purple`, `orange`, `pink`, `cyan`, плюс `default` для сброса. Если подключено удалённое управление, цвет синхронизируется и в веб-интерфейс.

```
/color purple    # цвет строки промпта
/color           # случайный цвет
/color default   # сбросить
```

#### `/scroll-speed`

Скорость прокрутки колесом мыши.

```
/scroll-speed   # скорость прокрутки колесом
```

#### `/focus`

Фокус-вид: на экране остаётся только ваш промпт, сводка инструментов и финальный ответ.

```
/focus   # оставить только суть на экране
```

#### `/hooks`

Просмотр настроенных хуков по событиям.

```
/hooks   # какие хуки настроены
```

#### `/auto-mode-setup`

Рассказать авто-режиму про ваше окружение и подправить его правила.

```
/auto-mode-setup   # рассказать авто-режиму про окружение
```

#### `/sandbox [exclude "шаблон"|install]`

Настроить песочницу для команд. Команда видна только там, где песочница поддерживается.

| Что передали | Что произойдёт |
|---|---|
| ничего | Откроется панель песочницы с зависимостями и переопределениями |
| `exclude "шаблон"` | Команда по шаблону выводится из-под песочницы |
| `install` | Доустановить саму песочницу (Windows) |

`exclude` — это тот случай, когда сборка или контейнерная команда не работает внутри изоляции и вы сознательно её оттуда достаёте; список копится в ключе `sandbox.excludedCommands`.

```
/sandbox exclude "docker *"   # вывести команду из песочницы
/sandbox install              # доустановить песочницу (Windows)
```

#### `/import [codex|gemini] [--dry-run] [--yes]`

Перенести конфигурацию из другого кодинг-агента: файлы инструкций, MCP-серверы, команды, субагентов и навыки. Поддерживаются `codex` и `gemini`.

| Аргумент | Что делает |
|---|---|
| `codex` или `gemini` | Откуда переносить; без аргумента спросят |
| `--dry-run` | Показать, что было бы перенесено, ничего не меняя |
| `--yes` | Перенести без интерактивного выбора |

В неинтерактивном режиме команда печатает, что нашла, и подсказывает строку для подтверждения импорта. Недоступна на сторонних провайдерах и при выключенной подгрузке серверных флагов. Требует версии 2.1.213 и новее.

Важно, чего `/import` **не** делает: файл `AGENTS.md`, который используют некоторые другие агенты, Claude Code сам по себе не читает — но `/import` умеет перенести конфигурацию оттуда в понятный ему вид.

```
/import codex              # забрать конфигурацию другого агента
/import gemini --dry-run   # посмотреть, что перенеслось бы
/import codex --yes        # перенести без вопросов
```

#### `/cloud-plugins`

Использовать ли в облачных сессиях плагины, включённые на этой машине.

```
/cloud-plugins   # плагины в облачных сессиях
```

#### `/skills`

Список навыков с управлением их видимостью.

Описания всех доступных навыков висят в контексте постоянно, каждую сессию, независимо от того, пользуетесь вы ими или нет. На большом наборе плагинов это ощутимая доля окна — экран `/skills` для того и нужен.

Печатаете — список фильтруется по имени, описанию и источнику. Клавиша `t` сортирует по числу токенов, и вот тут обычно и обнаруживается, что половину окна занимают три навыка, которыми вы не пользовались ни разу. `Space` или `Enter` переключает видимость навыка для модели и для меню, `Esc` сохраняет и закрывает.

Переключить получится не всё: плагинные навыки, навыки с `disable-model-invocation: true` во frontmatter и те, для которых видимость задана в корпоративных настройках или через `--settings`, не поддаются. Постоянный эквивалент — ключ `skillOverrides`, а найти то, что просто не используется, помогает `/skill-doctor`.

```
/skills   # список навыков и их видимость
```

#### `/plugin`

Управление плагинами и маркетплейсами. Алиасы: `/plugins`, `/marketplace`.

```
/plugin   # плагины и маркетплейсы
```

#### `/reload-skills`

Подхватить навыки и команды, изменённые на диске, без перезапуска сессии. Нужна, когда вы пишете свой навык и не хотите перезапускаться на каждую правку.

```
/reload-skills   # подхватить изменения навыков с диска
```

#### `/reload-plugins [--force]`

Активировать отложенные изменения плагинов — то же, что `/reload-skills`, только для плагинов.

Смысл `--force` тут противоположен интуитивному: это **не** «перечитать глубже». Если перезагрузка изменит набор загруженных MCP-инструментов, она обнулит кэш промпта, и команда, предупредив, **откажется её делать** — а `--force` заставляет сделать всё равно. То есть флаг преодолевает отказ, а не углубляет работу.

```
/reload-plugins           # применить отложенные изменения плагинов
/reload-plugins --force   # то же, даже если это сбросит кэш промпта
```

#### `/wellbeing`

Напоминания о перерывах и тихие часы. Алиасы: `/breaks`, `/break-reminder`, `/downtime`. **[выключена]** — в сборке 2.1.251 команда не работает, но сами настройки перерывов действуют.

```
/wellbeing   # напоминания о перерывах и тихие часы
```

### MCP и интеграции

#### `/mcp [reconnect|enable|disable [<сервер>|all]]`

Управление MCP-серверами и их OAuth-авторизацией.

| Что передали | Что произойдёт |
|---|---|
| ничего | Список серверов и их состояние |
| `reconnect <сервер>` | Поднять упавший сервер |
| `reconnect all` | Переподключить все |
| `disable <сервер>` | Временно выключить сервер |
| `enable <сервер>` | Включить обратно |

**Серверы отдают свои промпты как команды.** Они появляются в меню в виде `/имя-сервера:имя-промпта` — и это форма, которую стоит запомнить, потому что вторая, `/mcp__сервер__промпт`, работает тоже, но встречается только в старых статьях. Аргументы передаются через пробел и режутся по пробелам: каждый аргумент — один токен, фразу в кавычках как один аргумент передать не выйдет.

**Ресурсы сервера подтягиваются через `@`.** Форма — `@сервер:протокол://путь`, и это отдельный от инструментов механизм: не «позови инструмент», а «положи содержимое в контекст».

```
/mcp                                     # список серверов и их состояние
/mcp reconnect github                    # поднять упавший сервер
/mcp reconnect all                       # переподключить все
/mcp disable jira                        # временно выключить сервер
/mcp enable jira                         # включить обратно
/jira:create_issue login-bug high        # промпт сервера, нынешняя форма
/mcp__jira__create_issue login-bug high  # он же, старая форма
```

#### `/ide [open]`

Интеграции с IDE и их статус. Без аргумента показывает статус интеграции с редактором, с `open` — открывает файл в подключённой IDE.

```
/ide                                     # статус интеграции с редактором
/ide open                                # открыть файл в подключённой IDE
```

#### `/chrome`

Настройки Claude in Chrome.

```
/chrome                                  # настройки работы в браузере
```

### Аккаунт и авторизация

#### `/login`

Войти в аккаунт Anthropic или переключить аккаунт.

```
/login                                   # войти или переключить аккаунт
```

#### `/logout`

Выйти из аккаунта.

```
/logout                                  # выйти
```

#### `/setup-bedrock`

Настроить Amazon Bedrock: авторизация, регион, пины моделей. Видна при включённом Bedrock.

Вместе с `/setup-vertex` это пример команд, скрытых по состоянию: они появляются только тогда, когда выставлена соответствующая переменная окружения провайдера. Пока её нет, их нет и в `/help`.

```
/setup-bedrock                           # настроить Amazon Bedrock
```

#### `/setup-vertex`

Настроить Google Cloud: авторизация, проект, регион, пины моделей. Как и `/setup-bedrock`, видна только при выставленной переменной окружения провайдера.

```
/setup-vertex                            # настроить Google Cloud
```

#### `/install-github-app`

Установить Claude GitHub Actions для репозитория.

```
/install-github-app                      # поставить ревью в CI на репозиторий
```

#### `/install-slack-app`

Установить Slack-приложение.

```
/install-slack-app                       # поставить приложение в Slack
```

#### `/privacy-settings`

Просмотр и изменение настроек приватности.

```
/privacy-settings                        # что уходит наружу
```

### Использование и стоимость

#### `/usage`

Стоимость сессии, использование лимитов тарифа и статистика активности. Алиасы: `/cost`, `/stats`.

Экран показывает три вещи: сколько потрачено в этой сессии, насколько заполнены лимиты тарифа и на что уходят токены — с разбивкой по навыкам, субагентам, плагинам и отдельным MCP-серверам, плюс пометки о поведении, дающем больше десяти процентов расхода. Клавиши `d` и `w` переключают окно между сутками и неделей, а запланированные задачи с 2.1.242 получают свои строки.

Дальше — четыре вещи, которые важно понимать, и ни одна из них не очевидна.

**Разбивка считается по локальной истории сессий.** То есть по транскриптам на этой машине. Работа с другого компьютера и из веб-интерфейса в неё не попадает — при том что сами лимиты общие на аккаунт. Расхождение между «я почти ничего не потратил» и «лимит на исходе» обычно объясняется именно этим.

**Лимитов несколько, и переключение модели помогает только от одного.** Сообщения «вы исчерпали лимит сессии» и «вы исчерпали недельный лимит» относятся к окнам, общим для всех моделей, — `/model` тут не спасёт. И только после «вы исчерпали лимит Opus» или «лимит Sonnet» переход на модель другого семейства вернёт вас в работу. С версии 2.1.234 Claude Code умеет подождать сброса и продолжить прерванную задачу сам; включается это через `/rate-limit-options` и ключ `autoContinueAtUsageLimit`.

**Кэш промпта живёт час только на подписке.** Как только вы начинаете тратить кредиты сверх тарифа, время жизни кэша падает с часа до пяти минут — и та же самая пауза на обед, которая вчера ничего не стоила, сегодня оборачивается переработкой всего контекста заново. На ключе API и у облачных провайдеров пять минут по умолчанию.

**Счётчик сессии обнуляется на `/clear`.** До версии 2.1.211 он копился через очистки, и цифры из старых статей с нынешними не сходятся.

Если сервер лимитов недоступен, экран покажет последние загруженные данные с пометкой и предложит повторить по клавише `r`.

Незаметные статьи расхода, которые не видны в разбивке, но реально жгут лимит, пока вы ничего не делаете: запланированные задачи просыпаются и уходят с полным контекстом; сообщение от другой вашей сессии приходит как новый ход (лечится `crossSessionInbound: "hold"`); проверки активной цели начинают ходы, пока фоновая работа идёт; каждый живой тиммейт тратит, пока не завершится. И `/compact` — сам по себе крупный запрос, тогда как `/clear` не стоит ничего.

```
/usage                                   # лимиты, расход, разбивка
/stats                                   # то же, сразу на вкладке статистики
/cost                                    # то же, обычным видом
```

#### `/usage-credits`

Настроить кредиты, чтобы продолжать работу при достижении лимита тарифа. Помните про побочный эффект, описанный выше: с началом трат сверх тарифа кэш промпта живёт пять минут вместо часа.

```
/usage-credits                           # подключить кредиты сверх тарифа
```

### Удалённая работа и окружения

#### `/desktop`

Продолжить текущую сессию в desktop-приложении. Алиас: `/app`.

```
/desktop                                 # продолжить в приложении
```

#### `/teleport`

Втянуть веб-сессию в этот терминал. Алиас: `/tp`.

```
/teleport                                # забрать веб-сессию в терминал
```

#### `/remote-control`

Открыть сессию для управления с телефона или из веба. Алиас: `/rc`.

```
/remote-control                          # открыть сессию для телефона
```

#### `/session`

Показать адрес удалённой сессии и QR-код для неё. Алиас: `/remote`.

```
/session                                 # адрес сессии и QR-код
```

#### `/remote-env`

Окружение по умолчанию для веб-сессий и телепорта.

```
/remote-env                              # окружение по умолчанию для веба
```

#### `/web-setup`

Подключить GitHub к Claude Code в вебе через локальный `gh`.

```
/web-setup                               # подключить GitHub к вебу
```

### Диагностика и помощь

#### `/help`

Справка и список доступных команд.

```
/help                                    # что вообще доступно
```

#### `/status`

Версия, модель, аккаунт, связь с API и статусы инструментов. Работает даже во время ответа.

Открывает панель настроек на вкладке состояния. Кроме версии, модели, аккаунта и связи там есть строка вида сессии: `interactive` для обычной, `background job · attached` или `background job · unattended` для фоновой — в зависимости от того, подключён ли к ней терминал. Строка появилась в 2.1.221.

Плюс с 2.1.243 там же строка о пропущенных источниках корпоративных настроек: если админ положил файл политики, а действует другой, более приоритетный, здесь будет видно, какой именно проигнорирован. Это первое, что стоит смотреть, когда «настройка от админа не доехала».

```
/status                                  # версия, модель, аккаунт, связь
```

#### `/doctor`

Диагностика установки и приведение конфигурации в порядок. Алиас: `/checkup`.

С версии 2.1.205 это не экран с отчётом, а полноценный навык, который **правит вашу конфигурацию**. Что он делает: вычищает дубли между локальным и закоммиченным `CLAUDE.md`; урезает закоммиченный, выбрасывая то, что агент и так выведет из кода; переносит вечно загруженные инструкции в навыки и вложенные файлы, подгружаемые по требованию; предлагает сделать авто-режим режимом по умолчанию и заранее одобрить безопасные команды, которые вы чаще всего запрещали. Сначала показывает находки, потом меняет.

Терминальный `claude doctor` — это по-прежнему диагностика без правок и без запуска сессии; читает файлы настроек в текущей папке, не спрашивая доверия к ней.

Команда остаётся доступной, даже если встроенные навыки отключены целиком: она специально помечена как переживающая `disableBundledSkills`. Спрятать её можно переменной `DISABLE_DOCTOR_COMMAND` или записью `"doctor": "off"` в `skillOverrides`.

```
/doctor                                  # проверить и починить конфигурацию
```

#### `/feedback [отчёт]`

Отправить отзыв о Claude Code.

```
/feedback                                # отправить отзыв
/feedback правки применяются, но не показываются в диффе
```

#### `/bug [отчёт]`

Сообщить об ошибке или поделиться разговором. Алиас: `/share`.

```
/bug                                     # сообщить об ошибке
```

#### `/heapdump`

Снять дамп памяти — для диагностики её высокого потребления. Скрытая.

Пишет снимок памяти и разбор потребления на рабочий стол (в домашнюю папку на Linux без рабочего стола). Команда скрыта не флагом сервера, а тем, что не показывается в меню: набирается целиком и работает. Важное предупреждение: при обращении в поддержку прикладывайте **только** файл с разбором, а сам снимок содержит весь ваш разговор и учётные данные, и делиться им нельзя.

```
/heapdump                                # дамп памяти на рабочий стол
```

#### `/insights`

Отчёт-анализ ваших сессий: зоны проекта, паттерны работы, точки трения.

```
/insights                                # анализ моих сессий
```

#### `/skill-doctor`

Какие загруженные навыки не используются и зря занимают контекст.

```
/skill-doctor                            # какие навыки зря висят в контексте
```

#### `/explain-usage`

Куда ушли токены этой сессии, человеческим языком. **[Навык]**

```
/explain-usage                           # куда ушли токены
```

#### `/version`

**[выключена]** В сборке 2.1.251 не работает. Версию сессии показывает `/status`.

```
/version                                 # выключена, версию покажет /status
```

#### `/update`

**[выключена]** В сборке 2.1.251 не работает и скрыта. Обновление — терминальным `claude update`. Алиас: `/restart`.

```
/update                                  # выключена, обновляйтесь через claude update
```

#### `/install [версия] [--force]`

Поставить нативную сборку прямо из сессии. Аргумент — версия: `stable` или конкретный номер; `--force` ставит её поверх текущей.

```
/install stable                          # поставить стабильную сборку
/install 2.1.236 --force                 # конкретную версию, поверх текущей
```

### Информация и документация

#### `/release-notes`

Список изменений по версиям.

Приятная деталь: заметки печатаются в транскрипт, **но не попадают в контекст модели**. Когда-то это было не так, и показ всех изменений подмешивал весь чейнджлог в каждый последующий запрос.

```
/release-notes                           # что изменилось по версиям
```

#### `/powerup`

Короткие интерактивные уроки по возможностям.

```
/powerup                                 # короткий урок по возможностям
```

#### `/mobile`

QR-код для установки мобильного приложения. Алиасы: `/ios`, `/android`.

```
/mobile                                  # QR-код мобильного приложения
```

#### `/radio`

Lo-fi радио Claude FM в браузере.

```
/radio                                   # фоновая музыка
```

#### `/passes`

Поделиться бесплатной неделей с друзьями и получить кредиты.

```
/passes                                  # поделиться бесплатной неделей
```

#### `/upgrade`

Перейти на Max: выше лимиты, больше Opus.

```
/upgrade                                 # перейти на Max
```

#### `/stickers`

Заказать наклейки.

```
/stickers                                # заказать наклейки
```

#### `/team-onboarding`

Сгенерировать онбординг-гайд для команды из вашей истории использования.

```
/team-onboarding                         # гайд для команды из моей истории
```

### Команды, которых больше нет

Отдельная таблица, потому что половина статей в интернете всё ещё их советует.

| Команда | Что с ней случилось |
|---|---|
| `/vim` | Убрана в 2.1.92. Режим клавиш переключается в `/config` полем «Editor mode» или ключом `editorMode`. |
| `/pr-comments` | Убрана в 2.1.91. Просто попросите агента показать комментарии к pull request. |
| `/output-style` | Объявлена устаревшей в 2.1.73 и убрана в 2.1.91. |
| `/ultraplan` | Убрана. Вместо неё — режим планирования. |
| `/agents` | Формально осталась, но только отвечает, что субагентов заводят файлами в `.claude/agents/`. |
| `/extra-usage` | Переименована в `/usage-credits` в 2.1.144. |
| `/init-verifiers` | Никогда не существовала — если встретили, это выдумка. |
| `--enable-auto-mode` | Флаг убран в 2.1.111. Вместо него `--permission-mode auto`. |

Выключенные именно в сборке 2.1.251: `/version`, `/update`, `/loops`, `/wellbeing`, `/pause-memory`. Они зарегистрированы, но не работают и не показываются.

Есть ещё команды, которые появляются **по состоянию** и которых вы не увидите, пока состояние не наступит: `/limit-reset` и `/low-priority` — когда вы упёрлись в лимит сессии, `/rate-limit-options`, `/pro-trial-expired`, `/design-consent` и `/design-revoke`, а `/setup-cowork` живёт только в режиме Cowork. Плюс два совсем внутренних входа, `__remote-workflow` и `workflow-launch-exec`, через которые сервер передаёт сессии готовый воркфлоу.

И отдельная категория — **навыки только для модели**: `keybindings-help`, `memory-types`, `cowork-plugin`. Агент подтягивает их сам, набрать их нельзя. Механизм общий и доступен вам тоже — это поле `user-invocable: false` во frontmatter навыка.

Два живучих заблуждения напоследок. **Команды `/alias` не существует**: под этим именем в бинарнике лежит описание системной утилиты `alias` для автодополнения команд, вводимых через `!`. И **файла `.claudeignore` тоже не существует** — чтобы агент игнорировал файлы, используйте `.gitignore`, который учитывается по умолчанию, или `.ignore`.

### Как меню ищет команду

Мелочь, экономящая нервы. С версии 2.1.236 подсветка в меню срабатывает, если буквы после `/` совпадают с именем команды или её алиасом — с начала имени **или с начала слова внутри него**, причём разделители `:`, `_` и `-` при сравнении игнорируются. Поэтому `/adddir` подсвечивает `/add-dir`, а `/new` подсвечивает `/clear` через его алиас.

Что изменилось тогда же и важнее: **опечатка больше не угадывается.** Раньше Enter на несуществующей команде запускал похожую. Теперь после опечатки ничего не подсвечено, близкие варианты остаются в списке и выбираются стрелками или Tab, но Enter отправит ваш текст как есть и сообщит о неизвестной команде.

Недоступные команды из меню просто исчезают — вы увидите «нет команд по такому запросу». Некоторые вместо этого отвечают своим сообщением о недоступности: например `/schedule` на ключе API скажет, что требует аккаунта. И частичным именем скрытую команду не вытащить — её надо набрать целиком.

### Свои команды

Своя слэш-команда — это файл `SKILL.md` в папке навыка. Раньше для этого была отдельная сущность в `.claude/commands/`; сейчас команды и навыки слиты в одно, старые файлы продолжают работать и дают ровно такую же команду.

Где искать и куда класть:

| Расположение | Область действия | Имя команды |
|---|---|---|
| `~/.claude/skills/<имя>/SKILL.md` | личная, во всех проектах | `/<имя папки>` |
| `<проект>/.claude/skills/<имя>/SKILL.md` | проектная, коммитится | `/<имя папки>` |
| `.claude/commands/<имя>.md` | старая форма, работает | `/<имя файла>` |
| плагин | откуда установлен | `/<плагин>:<имя>` |

**Имя команды берётся из имени папки, а не из поля `name`.** Для личных и проектных навыков `name` — только подпись в списке. У плагинных наоборот: `name` заменяет последний сегмент, и `my-plugin/skills/review/` с `name: fancy` даёт `/my-plugin:fancy`. Короткая форма `/fancy` тоже сработает, если имя больше никем не занято.

Простейший пример:

```markdown title=".claude/skills/fix-issue/SKILL.md"
---
name: fix-issue
description: Разобрать issue по номеру, найти причину и предложить правку
argument-hint: <номер issue>
allowed-tools: Bash(gh issue view:*), Bash(gh pr create:*)
---

Возьми issue номер $0 из этого репозитория.

Текущее состояние ветки:

!`git status --short`

Прочитай описание, найди в коде причину, предложи минимальную правку
и объясни, почему она минимальная.
```

Вызывается как `/fix-issue 4821`. Здесь `$0` — это первый аргумент, то есть `4821`, а строка с `!` выполняется до того, как текст дойдёт до модели, и подменяется своим выводом. Про то и другое подробно ниже.

#### Поля frontmatter

Их двадцать. Полезно знать, что они вообще есть, — половина из них решает проблемы, которые иначе решают костылями.

| Поле | Что задаёт |
|---|---|
| `name` | Имя; у личных и проектных навыков — только подпись |
| `description` | Описание, по которому модель решает, подходит ли навык |
| `when_to_use` | Уточнение, когда его брать |
| `argument-hint` | Подсказка по аргументам в меню |
| `arguments` | Список именованных аргументов, позиционно отображаемых на `$имя` |
| `disable-model-invocation` | Запретить модели вызывать навык самой |
| `user-invocable` | `false` — навык только для модели, набрать его нельзя |
| `allowed-tools` | Что предварительно разрешить на этот ход |
| `disallowed-tools` | Что запретить |
| `model` | Модель на остаток хода; принимает `inherit` |
| `effort` | Уровень усилий: от `low` до `max` |
| `context` | `fork` — выполнить навык в субагенте |
| `agent` | Какой тип агента взять при `context: fork` |
| `background` | `false` — дождаться результата форкнутого навыка |
| `hooks` | Хуки, живущие вместе с навыком |
| `paths` | Ограничить автоматическую активацию этими путями |
| `shell` | Чем выполнять встроенные команды: `bash` или `powershell` |
| `metadata` | Произвольные данные |
| `license` | Лицензия |
| `compatibility` | Требования совместимости |

Три ограничения, на которых спотыкаются. Frontmatter читается, **только если открывающие `---` стоят первой строкой файла**. Поля `description` и `when_to_use` в листинге обрезаются до полутора тысяч символов — всё, что длиннее, модель при выборе навыка не увидит. И в старых файлах из `.claude/commands/` работает тот же frontmatter, **кроме `name` и `paths`** — они там игнорируются.

Отдельно про `allowed-tools`: это **предварительное одобрение на один ход**, а не ограничение. Разрешение снимается с вашим следующим сообщением, хотя содержимое навыка остаётся в контексте. И у него есть неприятное свойство, о котором стоит знать всем, кто запускает агента в чужом репозитории: **доверие к папке его не сдерживает.** Проектный навык применит свой `allowed-tools` и в папке, которую вы никогда не помечали доверенной, включая неинтерактивный запуск. То есть навык, лежащий в репозитории, может выдать себе широкие права — читайте это поле в чужих репозиториях до запуска.

#### Аргументы: нумерация с нуля

Самое неожиданное место во всей теме, и его стоит запомнить дословно.

| Подстановка | Что подставится |
|---|---|
| `$ARGUMENTS` | Вся строка аргументов как вы её набрали |
| `$ARGUMENTS[N]` | Аргумент по индексу, **индексация с нуля** |
| `$N` | Короткая форма: `$0` — первый аргумент, `$1` — второй |
| `$имя` | Аргумент из списка `arguments` во frontmatter, по позиции |

Да, `$0` — это первый аргумент, а не имя команды, как в оболочке. Ошибка на единицу здесь — самая частая.

Индексированные аргументы разбираются с учётом кавычек: в `/my-skill "hello world" second` значение `$0` — это `hello world` целиком. Индексированная подстановка, для которой аргумента не хватило, остаётся в тексте как есть; именованная превращается в пустую строку. Значение аргумента, внутри которого сам оказался `$1` или `$ARGUMENTS`, вставляется буквально и второй раз не разворачивается. Экранирование — одним обратным слэшем: `\$1.00`. И если ни одна подстановка в теле не получила аргументов, строка `ARGUMENTS: <значение>` просто допишется в конец.

#### Встроенные команды оболочки

Запись ``!`команда` `` выполняется **до** того, как содержимое попадёт к модели, и заменяется своим выводом. Так в навык подставляют актуальное состояние: ветку, дифф, список упавших тестов. Чем именно её выполнять — `bash` или `powershell` — задаётся полем `shell` во frontmatter.

Есть два правила, которые экономят полчаса недоумения. Форма распознаётся, **только если `!` стоит в начале строки или сразу после пробела** — в ``KEY=!`cmd` `` она останется текстом и не выполнится. И подстановка проходит по файлу один раз: вывод команды повторно не сканируется, поэтому команда не может напечатать другую подстановку в расчёте на второй проход.

Для многострочного скрипта открывают блок кода с восклицательным знаком после трёх обратных кавычек.

Выключается всё это ключом `disableSkillShellExecution`: каждая команда заменяется заглушкой о запрете политикой. Действует на пользовательские, проектные, плагинные навыки и навыки из добавленных папок; встроенные и корпоративные не трогает. Навыки, синхронизированные с claude.ai, такие команды локально не выполняют никогда, независимо от настройки.

#### Переменные путей

Внутри тела навыка и **внутри правил `allowed-tools`** подставляются `${CLAUDE_SKILL_DIR}` — папка самого навыка, `${CLAUDE_PROJECT_DIR}` — корень проекта, `${CLAUDE_SESSION_ID}`, а в плагинных навыках ещё `${CLAUDE_PLUGIN_ROOT}` и `${CLAUDE_PLUGIN_DATA}`.

То, что они работают в обоих местах, — не мелочь, а рабочий приём: так навык запускает свой собственный скрипт без единого вопроса о правах.

```markdown title=".claude/skills/render/SKILL.md"
---
name: render
description: Отрисовать схему из исходника
allowed-tools: Bash(${CLAUDE_SKILL_DIR}/scripts/render.sh *)
---

Запусти `${CLAUDE_SKILL_DIR}/scripts/render.sh $0` и покажи результат.
```

Правило разрешает ровно ту команду, которую тело велит выполнить, — ни шире, ни уже.

#### Мелочи, которые полезно знать

**Навыки стыкуются.** В начале одного сообщения можно поставить до шести команд: `/write-tests /fix-issue 123` загрузит оба навыка и передаст обоим `123` как аргументы. До версии 2.1.199 загружался только первый, а остальное считалось текстом. Исключение — `/code-review`, которая забирает остаток строки себе.

**`ultrathink` в теле навыка** просит модель думать глубже, когда навык срабатывает. Работает прямо словом в тексте.

**Имена встроенных команд зарезервированы**, даже если в вашей сессии они недоступны: навык с конфликтующим именем, приехавший из синхронизации, будет пропущен.

**Проверить навык можно без плагина**: `claude plugin validate <путь>` работает и на обычной папке с навыками и агентами. А чтобы папка с навыками стала плагином, достаточно положить в неё `.claude-plugin/plugin.json`.

## Настройки: `settings.json`

Дальше — ключи файла настроек, включая экспериментальные и корпоративные, с типами и примерами. Список сведён из двух источников: официального справочника настроек, где сейчас около двухсот двадцати записей, и схемы валидации внутри самого CLI. Они не совпадают: в схеме есть ключи, которых нет в документации, и наоборот — в документации есть ключи, которых схема не знает, потому что живут они в другом файле. Про это ниже отдельно.

Обозначения: **[эксп]** — экспериментальный или внутренний ключ, может измениться или исчезнуть; **[админ]** — действует только из корпоративного источника; **[устар]** — устаревший; **[глобальный]** — живёт не в `settings.json`, а в `~/.claude.json`.

### Где лежит файл

Уровней не четыре и не пять, а больше, чем принято писать. Начнём с обычных:

| Уровень | Файл | Назначение |
|---|---|---|
| Пользовательский | `~/.claude/settings.json` | Личные настройки на все проекты |
| Проектный | `<проект>/.claude/settings.json` | Командные, коммитятся в репозиторий |
| Локальный | `<проект>/.claude/settings.local.json` | Личные на конкретный проект, в `.gitignore` |
| Командная строка | `--settings <файл или JSON>` | Только на один запуск |
| Политика | зависит от системы | Корпоративная политика |
| Глобальный конфиг | `~/.claude.json` | Настройки, которые в `settings.json` игнорируются |

**Последняя строка — то, чего нет почти нигде.** Часть настроек живёт только в `~/.claude.json`, и если написать их в `settings.json`, они будут молча проигнорированы. Туда же Claude Code складывает вашу сессию входа, конфигурацию MCP-серверов и решения о доверии к папкам. Обычно этот файл пишется сам, руками в него лезут редко — но знать про него надо, потому что «я выставил ключ, и ничего не произошло» чаще всего объясняется именно этим.

Корпоративная политика тоже не одна. Источников четыре, и они ранжированы:

| Ранг | Источник |
|---|---|
| 1 | Серверные настройки от claude.ai или корпоративного шлюза |
| 2 | Политика операционной системы: домен управляемых настроек на macOS, ключ реестра `HKLM\SOFTWARE\Policies\ClaudeCode` на Windows |
| 3 | Файл управляемых настроек: `/Library/Application Support/ClaudeCode/managed-settings.json`, `/etc/claude-code/managed-settings.json`, `C:\Program Files\ClaudeCode\managed-settings.json` |
| 4 | Тот же ключ реестра, но в `HKCU` — доступный самому пользователю на запись, а потому не считающийся административным и применяющийся только там, где выше ничего нет |

Политика из системы и `HKCU` перечитываются каждые полчаса, серверные настройки — раз в час. По умолчанию источники **не складываются**: применяется самый старший, остальные отбрасываются. Изменить это можно ключом `managedSourcesBehavior: "merge"`, но задать его надо в самом старшем из развёрнутых источников — нижний не может сам напроситься в слияние, а `HKCU` не сливается никогда.

Если админ что-то положил, а оно «не доехало» — смотрите в `/status`: с версии 2.1.243 там есть строка о пропущенных источниках, где прямо написано, какой файл проигнорирован.

### Формат: строгий JSON

Тут я должен исправить сам себя, потому что раньше думал иначе и в интернете это повторяют часто.

**Файлы настроек — строгий JSON.** Комментарий `//` или висячая запятая — синтаксическая ошибка, и при следующем запуске файл будет помечен как ошибочный целиком. Никакого JSONC. (Путаница возникает потому, что JSONC в продукте действительно есть в других местах — например, `/terminal-setup` разбирает конфигурацию редактора с комментариями.)

Проверить свой файл проще всего запуском: ошибки настроек печатаются на старте. `claude doctor` покажет их разбором.

Полезная привычка — строка `$schema`:

```json title=".claude/settings.json"
{
  "$schema": "https://json.schemastore.org/claude-code-settings.json"
}
```

Редактор начнёт подсказывать имена ключей и подчёркивать опечатки, а опечатка в имени ключа — самая частая причина того, что настройка «не работает»: неизвестные ключи молча игнорируются. Оговорка: схема иногда отстаёт от продукта. Например `teammateDefaultModel` в ней ещё есть, а из Claude Code он убран в 2.1.234 и ни на что не влияет.

### Кто кого перекрывает

Порядок уровней — тот, что в таблице выше. Но «перекрывает» верно не для всего, и вот три исключения, которые ломают интуицию.

**Списки складываются, а не заменяются.** Если `permissions.allow` задан и в пользовательском файле, и в проектном, вы получите объединение обоих. Верхний уровень **не может убрать** запись нижнего — единственное, что это умеет, корпоративный `allowManagedPermissionRulesOnly`. Любая таблица приоритетов, где написано «каждый следующий перекрывает предыдущий», для списков неверна.

Четыре списка ведут себя иначе: `fallbackModel` берётся целиком из самого старшего файла, который его определяет (это упорядоченная цепочка, смешивать её бессмысленно); `modelPicker` — целиком из старшего среди корпоративного, `--settings` и пользовательского, а в проектном и локальном игнорируется; `availableModels` от админа применяется как есть, не подхватывая ваши добавления; `modelSettings` разрешается отдельно для каждой модели.

**У семи ключей строгое значение снизу побеждает корпоративное.** Обычно политика абсолютна — её не перебивает даже `--settings`. Но для этих ключей более строгий вариант из любого уровня выигрывает, потому что запретить себе лишнее вам никто мешать не станет: `disableClaudeAiConnectors` со значением `true`, `enableArtifact` со значением `false` (и `disableArtifact: true`), `isolatePeerMachines` со значением `true`, `remoteControlAtStartup` со значением `false` из проектного или локального файла, `crossSessionInbound` с более строгим значением на шкале «принимать — придержать — отказывать», `useAutoModeDuringPlan` и `syncClaudeAiSkills` со значением `false`.

**Проектные разрешения ждут доверия к папке.** `permissions.allow` и `permissions.additionalDirectories` из проектного файла начинают действовать только после того, как вы подтвердили доверие к этой папке. `deny` и `ask` действуют сразу — они только ограничивают.

А вот дальше самое важное, и это стоит прочитать всем, кто запускает `claude -p` в чужом репозитории. **В неинтерактивном режиме диалог доверия не показывается**, поэтому проектные разрешающие правила отбрасываются с предупреждением в поток ошибок — **но хуки этого репозитория выполняются, его блок `env` применяется, его вспомогательные скрипты авторизации запускаются, поле `allowed-tools` его навыков действует, а серверы из его `.mcp.json` подключаются без вопросов.** Отбрасываются именно разрешения, а не исполняемые части.

Безопасный запуск в непроверенной папке — это `--setting-sources user`, `--bare`, `--restricted` или `--settings '{"disableAllHooks": true}'`. Просто выставить `disableAllHooks` в своём пользовательском файле **недостаточно**: проектный файл старше и вернёт его обратно.

### Переменные окружения — не уровень

Ещё одна вещь, которую обычно рисуют неправильно. Переменные окружения не стоят «между» уровнями настроек: кто кого перекрывает, решается **для каждой пары «переменная — ключ» отдельно**.

- `ANTHROPIC_MODEL` из оболочки перекрывает ключ `model` из любого файла.
- `ANTHROPIC_DEFAULT_MODEL` действует, только если `model` не задан нигде.
- `--model` и `/model` перекрывают `ANTHROPIC_MODEL`.
- А `CLAUDE_CODE_EFFORT_LEVEL` устроен наоборот и перекрывает `--effort` и `/effort`.

И отдельно: **значение из блока `env` в настройках побеждает экспорт из оболочки**, а не наоборот, как принято думать. Claude Code записывает каждую запись блока в окружение процесса поверх унаследованного значения. Удалить переменную из файла настроек нельзя — можно выставить её в пустую строку, что при выборе провайдера считается «не задана» (хотя дочерние процессы получат пустое значение). Переменные оболочки читаются один раз на старте, а значения из `env` перечитываются при изменении файла — кроме подсистем, которые настраиваются только при запуске, вроде телеметрии.

### Скелет файла

Скаляры вроде `model`, `theme`, чисел и флагов пишутся на верхнем уровне. Сгруппированные настройки — `permissions`, `env`, `hooks`, `statusLine`, `worktree`, `voice`, `sandbox`, `sshConfigs` — вложенные объекты.

```json title=".claude/settings.json"
{
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
  "model": "opus",
  "outputStyle": "default",
  "theme": "dark",
  "autoCompactEnabled": true,
  "cleanupPeriodDays": 30,
  "includeCoAuthoredBy": false,
  "env": {
    "CLAUDE_CODE_USE_POWERSHELL_TOOL": "1",
    "DISABLE_TELEMETRY": "1"
  },
  "permissions": {
    "allow": ["Bash(npm run build)", "Edit(src/**)"],
    "ask": ["Bash(git push:*)"],
    "deny": ["Read(./.env)"],
    "defaultMode": "acceptEdits",
    "additionalDirectories": ["../shared-lib"]
  },
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [{ "type": "command", "command": "npm run lint" }]
      }
    ]
  },
  "statusLine": {
    "type": "command",
    "command": "~/.claude/statusline.sh",
    "padding": 1
  },
  "worktree": {
    "symlinkDirectories": ["node_modules"],
    "baseRef": "fresh"
  },
  "enabledPlugins": {
    "formatter@anthropic-tools": true
  }
}
```

### Аутентификация и провайдеры

| Параметр | Тип | Что делает |
|---|---|---|
| `apiKeyHelper` | строка, путь к скрипту | Скрипт, печатающий в стандартный вывод значение для авторизации. Удобно для временных и ротируемых ключей. |
| `proxyAuthHelper` | строка, команда | **[эксп]** Команда, печатающая значение заголовка авторизации прокси. |
| `awsCredentialExport` | строка, путь | Скрипт, экспортирующий учётные данные AWS для Bedrock. |
| `awsAuthRefresh` | строка, путь | Скрипт, обновляющий аутентификацию AWS до истечения срока. |
| `gcpAuthRefresh` | строка, команда | Команда обновления аутентификации Google Cloud. |
| `otelHeadersHelper` | строка, путь | Скрипт, печатающий HTTP-заголовки для экспорта телеметрии. |
| `policyHelper` | объект | **[админ]** Исполняемый файл, вычисляющий настройки политики на старте: `path`, `timeoutMs`, `refreshIntervalMs`. |
| `policyHelpers` | объект по системам | **[админ]** То же, но отдельно для macOS, Linux, Windows и WSL. |
| `forceLoginMethod` | `claudeai`, `console`, `gateway` | Жёстко задать способ входа: подписка, биллинг через Console или корпоративный шлюз. |
| `forceLoginOrgUUID` | строка или массив | **[админ]** Разрешить вход только в указанную организацию или в любую из списка. |
| `forceLoginGatewayUrl` | строка, адрес | **[админ]** Обязательный адрес корпоративного шлюза для входа. |
| `forceRemoteSettingsRefresh` | boolean | **[админ]** Блокировать старт, пока не подтянутся свежие настройки политики. |
| `parentSettingsBehavior` | `first-wins`, `merge` | **[админ]** Как слой родителя из SDK сочетается с админским. |
| `xaaIdp` | объект | **[эксп]** Подключение внешнего провайдера идентификации: `issuer`, `clientId`, `callbackPort`. |

Значение `gateway` у `forceLoginMethod` учитывается только из источника, лежащего на самой машине: файла политики, домена настроек macOS или ветки `HKLM`. В пользовательском, проектном, локальном и в `HKCU` оно считается незаданным — иначе корпоративный вход можно было бы перенаправить из репозитория.

### Модель, мышление, усилия

| Параметр | Тип | Что делает |
|---|---|---|
| `model` | строка | Модель по умолчанию: алиас или полный идентификатор. |
| `availableModels` | массив строк | **[админ]** Белый список моделей. Пустой массив — только модель по умолчанию. |
| `enforceAvailableModels` | boolean | **[админ]** Распространить белый список и на строку «по умолчанию» в выборе модели. |
| `modelOverrides` | объект | **[админ]** Соответствие идентификаторов Anthropic идентификаторам провайдера. |
| `modelPicker` | объект | Свой список в `/model`: записи `{model, label, description}`; `replaceBuiltInOptions` заменяет встроенный. |
| `modelSettings` | объект | Настройки, привязанные к конкретной модели, — сейчас уровень усилий. |
| `modelPricing` | объект | **[админ]** Тарифы организации вместо прайс-листа: множитель скидки и поштучные цены. |
| `advisorModel` | строка | Модель для советчика. |
| `agent` | строка | Имя агента для главного потока: его системный промпт, ограничения и модель. |
| `alwaysThinkingEnabled` | boolean | `false` выключает размышления. |
| `showThinkingSummaries` | boolean | Показывать сводки размышлений в диалоге и в транскрипте. |
| `effortLevel` | `low`, `medium`, `high`, `xhigh` | Сохранённый уровень усилий. **`max` схема не принимает.** |
| `ultracode` | boolean | **[эксп]** `xhigh` плюс постоянная оркестровка воркфлоу. |
| `fastMode` | boolean | Включён ли ускоренный режим вывода. |
| `fastModePerSessionOptIn` | boolean | Не сохранять fast-режим между сессиями. |
| `autoCompactEnabled` | boolean | Автоматически сжимать разговор при заполнении контекста. |
| `autoCompactWindow` | число 100000–1000000 | Размер окна автосжатия в токенах. |
| `precomputeCompactionEnabled` | boolean | Готовить сжатие заранее, пока идёт работа. |
| `switchModelsOnFlag` | boolean | При срабатывании фильтра безопасности переключиться на другую модель. **По умолчанию `true`.** |
| `fallbackModel` | массив строк | Модели для отката при перегрузке основной; пробуются по порядку. |
| `promptCacheTtl` | `5m`, `1h` | Время жизни кэша промпта основного разговора. |
| `subagentPromptCacheTtl` | `5m`, `1h` | То же для субагентов; по умолчанию пять минут. |

Три значения по умолчанию, которые меняют поведение и о которых редко пишут.

`switchModelsOnFlag` включён. То есть при срабатывании фильтра безопасности модель молча меняется, чтобы не прерывать диалог. Если выключить, интерактивная сессия встанет и спросит вас, а неинтерактивный запуск завершит запрос ошибкой — для скриптов это часто правильнее, потому что тихая подмена модели в CI выглядит как необъяснимая смена поведения.

`promptCacheTtl` подбирается сам: час на подписке, пять минут иначе. Переменная окружения его перекрывает.

`effortLevel` не принимает `max` намеренно, чтобы максимальный уровень не оставался включённым навсегда; на сессию он ставится командой или флагом.

### Права доступа инструментов

Самая практически важная часть файла — и самая недооценённая по количеству подводных камней. Вложенный объект `permissions`:

| Поле | Тип | Что делает |
|---|---|---|
| `allow` | массив правил | Что разрешено без вопросов. |
| `deny` | массив правил | Что запрещено всегда. |
| `ask` | массив правил | Что всегда требует подтверждения. |
| `defaultMode` | см. ниже | Режим по умолчанию. |
| `disableBypassPermissionsMode` | `"disable"` | Запретить режим обхода подтверждений. |
| `additionalDirectories` | массив путей | Дополнительные директории в области доступа. |

Рядом ключи верхнего уровня: `skipDangerousModePermissionPrompt` и `skipAutoPermissionPrompt` помнят, что вы уже приняли соответствующее предупреждение; `allowManagedPermissionRulesOnly` **[админ]** велит учитывать списки только из политики; `disableAutoMode` выключает авто-режим; `useAutoModeDuringPlan` разрешает применять его в режиме планирования, по умолчанию да.

#### Режимы

| Режим | Что делает |
|---|---|
| `default` | Обычный: спрашивать, когда нужно. Алиас — `manual`, с версии 2.1.200 принимается и в настройках |
| `acceptEdits` | Автоматически принимать правки файлов |
| `plan` | Только анализ, ничего не менять |
| `auto` | Решение принимает классификатор |
| `dontAsk` | **Автоматически отказывать во всём, что потребовало бы вопроса** |
| `bypassPermissions` | Принимать всё |

**`dontAsk` — не «не спрашивать по мелочам».** Это самое опасное недопонимание во всей теме прав, и я сам его повторял. Режим не смягчает, а ужесточает: всё, что в обычном режиме вызвало бы вопрос, **автоматически запрещается**. Работает только то, что попало в `allow`, встроенный набор безопасных команд чтения и то, что одобрил хук. Ваши собственные правила `ask` в этом режиме не спрашивают, а отказывают; вопрос агента к вам тоже отклоняется, даже если разрешён.

Ещё одна тонкость: значение `auto` **не действует из проектных и локальных настроек** — его надо задавать в пользовательском файле. А сессии, запущенные из расширения VS Code, читают только пользовательский, корпоративный и `--settings`.

#### Формат правила

Правило записывается как `Инструмент(уточнение)`: `Bash(npm run build)`, `Edit(src/**)`, `Read(~/.zshrc)`.

```json title=".claude/settings.json"
{
  "permissions": {
    "allow": ["Bash(npm run:*)", "Edit(src/**)", "Read(~/.config/**)"],
    "ask": ["Bash(git push:*)"],
    "deny": ["Read(./secrets/**)", "Read(./.env)"],
    "defaultMode": "acceptEdits",
    "additionalDirectories": ["../shared", "/tmp/workspace"]
  }
}
```

Выглядит просто. Дальше — двенадцать правил поведения, каждое из которых объясняет какой-нибудь популярный вопрос «почему моё правило не работает».

#### Порядок проверки: сначала запрет, потом вопрос, потом разрешение

Правила проверяются в фиксированном порядке — `deny`, затем `ask`, затем `allow`, — и **побеждает первое совпадение, а не самое точное**. Отсюда два следствия, которые ломают ожидания.

Широкий запрет перекрывает узкое разрешение: `deny` с `Bash(aws *)` заблокирует `allow` с `Bash(aws s3 ls)`. Исключений из запрета не бывает — механизма «запретить всё, кроме» здесь нет.

Совпавшее `ask` спрашивает, даже если есть более точное `allow`. Это не ошибка, это способ сказать «эту команду всегда подтверждаю руками», и она работает поверх любых разрешений.

Между уровнями настроек то же самое: запрет из пользовательского файла бьёт разрешение из проектного и наоборот, потому что все `deny` со всех уровней проверяются раньше любых `allow`.

Ещё одна мелочь с большими последствиями: **голое имя инструмента в `deny` убирает инструмент из контекста целиком.** Запись `"Bash"` в запретах означает, что агент про этот инструмент вообще не узнает. А `Bash(rm *)` оставляет инструмент видимым и запрещает только совпадающие вызовы.

#### Защищённые пути проверяются раньше ваших правил

Существует список путей, запись в которые проверяется **до** того, как посмотрят на `allow`. Поэтому `Edit(.claude/**)` в любом файле настроек не даёт ровным счётом ничего — и это самый частый источник вопросов «почему моё разрешение игнорируется».

В списке защищённых каталогов: `.git`, `.config/git`, `.vscode`, `.idea`, `.husky`, `.cargo`, `.devcontainer`, `.yarn`, `.mvn` и `.claude` целиком, кроме `.claude/worktrees`. Из файлов — `.gitconfig`, `.gitmodules`, все файлы профилей и запуска оболочки, `.envrc`, `.npmrc`, `.yarnrc*`, `.pnp.cjs`, `bunfig.toml`, `.bazelrc`, `.pre-commit-config.yaml`, `lefthook.*`, `gradle-wrapper.properties`, `.ripgreprc`, `pyrightconfig.json`, `.mcp.json` и `.claude.json`.

Логика понятна: всё это — файлы, правка которых меняет поведение вашей же машины при следующей команде, вплоть до того, что выполнится вместо `git commit`. Что произойдёт при попытке, зависит от режима: обычный и `acceptEdits` спросят, `plan` разрешит только если доступен обход, `auto` отдаст классификатору, `dontAsk` откажет, `bypassPermissions` разрешит. В диалоге при этом есть отдельный пункт — разрешить правку своих настроек на эту сессию.

#### Предохранитель на удаление

`rm` и `rmdir`, нацеленные на критические пути, **не одобряются ничем**: ни правилом в `allow`, ни хуком, вернувшим разрешение.

Критические пути — это корень файловой системы и любой его непосредственный потомок, домашняя папка, корни дисков на Windows и их каталоги первого уровня, текущая рабочая папка и её родители, а также шаблоны внутри добавленных директорий.

Самое интересное — таблица по режимам, потому что она устроена не так, как все ожидают:

| Режим | Что будет |
|---|---|
| обычный, `acceptEdits`, `plan` | Спросит |
| `auto` | Отдаст классификатору |
| `dontAsk` | Откажет |
| `bypassPermissions` | **Спросит** |

То есть режим «обходить все подтверждения» здесь **строже**, чем авто-режим: `--dangerously-skip-permissions` на таком удалении всё равно остановится.

Считается и то, что выглядит безобидно: `rm -rf "$DIR"/*` попадает под предохранитель, потому что пустая переменная превращает это в удаление от корня. Спрятать команду в подстановку, обратные кавычки или подстановку процесса не поможет — проверка их видит.

#### Четыре якоря пути

Правила `Read` и `Edit` используют синтаксис `.gitignore`, и в нём четыре разных способа привязать путь. Их путают постоянно.

| Запись | К чему привязано |
|---|---|
| `//путь` | Корень файловой системы |
| `~/путь` | Домашняя папка |
| `/путь` | **Источник настроек**, а не корень диска |
| `путь` или `./путь` | Текущая рабочая папка |

Третья строка — ловушка. Одиночный слэш в начале **не означает абсолютный путь**: он привязывает правило к тому файлу настроек, где оно написано. Правило `Read(/secrets/**)` в `~/.claude/settings.json` означает `~/.claude/secrets/**`, а вовсе не `secrets` в вашем проекте. В проектных настройках тот же слэш отсчитывается от основной рабочей папки, в `--settings` — от папки указанного файла, а правила из локальных настроек с версии 2.1.211 привязаны к рабочей папке сессии, а не к корню репозитория, — то есть в отдельной рабочей копии `Edit(/src/**)` попадёт в её собственный `src`.

Голое имя файла ведёт себя как в `.gitignore` и совпадает на любой глубине: `Read(.env)` — это то же самое, что `Read(**/.env)`. А вот `Read(//**/.env)` привязано к корню файловой системы.

На Windows пути приводятся к POSIX-виду до сравнения: `C:\Users\alice` превращается в `/c/Users/alice`. Поэтому правило на все диски пишется как `//**/.env`, а на конкретный — `//c/**/.env`.

#### Одно и то же правило ловит разную глубину в `allow` и в `deny`

Односегментный относительный шаблон папки ведёт себя асимметрично, и это специально.

`Edit(src/**)` в `allow` совпадает только с папкой `src` в корне рабочей директории. Он же в `deny` или `ask` совпадает с папкой `src` **на любой глубине** — то есть поймает и `vendor/pkg/src/lib.js`.

Смысл понятный: разрешение должно быть узким, запрет — широким. Все остальные формы ведут себя одинаково в любом типе правил: `Edit(/src/**)` и `Edit(src/components/**)` совпадают только там, где написаны, `Edit(**/src/**)` — везде. Поведение поменялось в 2.1.214: до неё `Edit(src/**)` ловил любую глубину и в разрешениях тоже.

#### Двоеточие только в конце, а пробел перед звёздочкой значим

Форма `Bash(ls:*)` — это ровно то же самое, что `Bash(ls *)`. Но распознаётся она **только в конце шаблона**: в `Bash(git:* push)` двоеточие — обычный символ, и правило не совпадёт ни с чем.

Пробел перед звёздочкой — часть правила. `Bash(ls *)` требует пробела и потому не совпадает с `lsof`; `Bash(ls*)` — совпадает. Завершающая звёздочка ловит и голую команду без аргументов, но только если она в правиле единственная: `Bash(ls *)` совпадёт с `ls`, а `Bash(* --help *)` совпадёт с `npm --help x` и не совпадёт с `npm --help`.

Всё, что стоит до первой звёздочки, сравнивается буквально. Отсюда неприятность: `Bash(git * main)` разрешает **любую** подкоманду git, включая `-c` с произвольной конфигурацией. С версии 2.1.246 на разрешающие правила со звёздочкой перед подкомандой печатается предупреждение при запуске.

#### Составные команды

Разделители, которые Claude Code понимает: `&&`, `||`, `;`, `|`, `|&`, `&` и перевод строки. **Каждая часть должна совпасть с правилом отдельно** — общего разрешения на всю строку не бывает.

Отдельный случай: если оператор оказался в конце и после него ничего нет — например `npm test &&`, — команда считается неразбираемой и **не делится вовсе**. Тогда даже `Bash(npm *)` её не одобрит.

Когда вы отвечаете «да, и больше не спрашивай» на составную команду, сохраняется **отдельное правило на каждую часть**, которой это требовалось. Переход в подпапку породит своё правило на чтение. Больше пяти правил из одной команды не сохранится.

Перенаправления вывода `>`, `>>`, `2>` проверяются как запись в файл — против ваших правил `Edit`, списка защищённых путей и рабочих директорий. `/dev/null` из проверки исключён; цель, начинающаяся с `~` или содержащая шаблон, требует подтверждения всегда.

#### Какие обёртки снимаются, а какие нет

Перед сопоставлением с правилами из команды убираются: `timeout`, `time`, `nice`, `nohup`, `stdbuf`, встроенные `command` и `builtin`, `noglob` из zsh и голый `xargs` — последний только без флагов, `xargs -n1 grep` разбирается как команда `xargs`.

Снимается и ведущее присваивание известной безопасной переменной, поэтому `Bash(npm test *)` совпадёт с `NODE_ENV=test npm test`. Разрешающее правило дальше присваивания любой другой переменной не пройдёт, а запрещающее пройдёт через любое.

**Список фиксирован и не настраивается.** И в нём нет ни одного запускателя окружения: `npx`, `docker exec`, `direnv exec`, `devbox run`, `mise exec` не снимаются. Практический вывод: `Bash(devbox run *)` — это разрешение на `devbox run rm -rf .`, потому что для проверки это команда `devbox`, а не `rm`.

Отдельно есть команды, которые нельзя одобрить префиксным правилом никогда: `watch`, `setsid`, `ionice`, `flock`, а также `find` с `-exec` или `-delete`. В обычном режиме они спросят всегда.

#### Правила для `Write`, `Glob`, `NotebookEdit` и `MultiEdit` принимаются и не работают

Файловые права проверяются **только** против правил `Edit(...)` и `Read(...)`. Правило вида `Write(docs/**)` или `Glob(docs/**)` будет разобрано, сохранено, показано в `/permissions` — и никогда не использовано. С версии 2.1.210 на такое печатается предупреждение при запуске.

Пишите `Edit(...)` вместо `Write`, `NotebookEdit` и `MultiEdit` и `Read(...)` вместо `Glob`. Голое имя инструмента без пути при этом работает: запретить `Write` целиком можно.

Полезное следствие: запрещающее правило `Read` на путь заодно блокирует правку и запись по нему — но не `NotebookEdit`.

#### Символические ссылки

Каждое обращение к файлу проверяется по двум путям сразу: по самой ссылке и по тому, куда она ведёт. Правила при этом асимметричны.

Разрешение действует, только если совпали **оба** пути. Поэтому ссылка внутри разрешённой папки, ведущая наружу, всё равно спросит.

Запрет действует, если совпал **хотя бы один**. Поэтому ссылка на запрещённый файл запрещена сама.

На практике: если разрешено `Read(./project/**)` и запрещено `Read(~/.ssh/**)`, то `./project/key`, ведущий на `~/.ssh/id_rsa`, будет заблокирован.

#### Правила по параметрам инструмента

Малоизвестное семейство. Запрещающие и спрашивающие правила умеют совпадать по скалярному полю входных данных инструмента:

```json title=".claude/settings.json"
{
  "permissions": {
    "deny": ["Agent(model:opus)", "Agent(isolation:worktree)", "Bash(run_in_background:true)"]
  }
}
```

Один параметр на правило, вложенные поля не поддерживаются, `*` подставляется вместо значения. Параметр, который модель не передала, не совпадает никогда — то есть `Agent(model:opus)` не поймает вызов, где модель не указана вовсе. Значение сравнивается с тем, что пришло, **до** нормализации: алиас `opus` совпадёт, а полный идентификатор той же модели — нет.

Главное поле инструмента таким образом не матчится намеренно: `command`, `file_path`, `path`, `notebook_path`, `url` исключены. Правило `Bash(command:rm *)` игнорируется с предупреждением — его было бы слишком легко обойти составной командой.

Для MCP-инструментов параметрические правила работают только через флаг `--disallowedTools`: любое правило с `mcp__` и скобками в файле настроек пропускается и попадает в список некорректных настроек и в вывод `claude doctor`.

#### Шаблоны в имени инструмента

В запрещающих и спрашивающих правилах имя инструмента можно задавать шаблоном, и он должен покрывать имя целиком: `"*"` — все инструменты, `"mcp__*"` — все инструменты MCP.

В разрешающих правилах шаблон допустим **только после буквального префикса `mcp__<сервер>__`**, причём имя сервера должно быть без шаблонов. То есть `mcp__github__get_*` работает, а `"*"`, `"B*"` и `"mcp__*"` в `allow` пропускаются с предупреждением и не разрешают ничего.

И ещё одна ловушка: **имя инструмента на экране может отличаться от канонического.** То, что показано как «Stop Task», канонически называется `TaskStop`, и в правилах и в фильтрах хуков работает только каноническое имя.

#### `WebFetch` — два разных правила с похожим видом

Голое `WebFetch` и `WebFetch(domain:*)` — не одно и то же, потому что вторая форма заодно правит список доменов песочницы.

| Правило | Что делает |
|---|---|
| `allow: WebFetch` | Загружает страницы без вопросов, но песочницу не расширяет — `curl` из песочницы к тому же хосту всё равно спросит |
| `allow: WebFetch(domain:*)` | Плюс разрешает песочнице сетевой доступ |
| `deny: WebFetch` | Убирает инструмент целиком |
| `deny: WebFetch(domain:*)` | Инструмент остаётся, каждая загрузка отклоняется, сеть песочницы закрыта |

Шаблоны в домене: `*.example.com` ловит поддомены любой глубины, но **не сам** `example.com`. В любой другой позиции звёздочка совпадает только с текстом между двумя точками — `example.*` поймает `example.org` и не поймает `example.evil.com`.

И трезвое замечание: пока у агента есть доступ к оболочке, разрешения `WebFetch` не ограничивают сетевой доступ вообще никак.

#### Встроенный набор безопасных команд

Часть команд выполняется без вопроса в **любом** режиме, и этот список зашит: `ls`, `cat`, `echo`, `pwd`, `head`, `tail`, `grep`, `find`, `wc`, `which`, `diff`, `stat`, `du`, `cd` и read-only формы `git`. Расширить его нельзя, можно только перекрыть своим правилом `ask` или `deny`.

Но и он спросит, если: незакавыченный шаблон встретился в команде, у которой есть флаги записи или запуска (`find`, `sort`, `sed`, `git` — шаблон мог бы развернуться в `-delete`); у `docker` есть `-H`, `--context`, `--url` или `--connection`; у `file` есть `-m`, `--magic-file`, `-f` или `--files-from`; в аргументах сетевой путь Windows; команда длиннее десяти тысяч символов или не разбирается. Плюс `cd` вместе с `git` спросит, если папка действительно меняется — в новой папке могут быть свои хуки git.

#### PowerShell

Правила для PowerShell устроены так же, сравниваются без учёта регистра и **приводят популярные псевдонимы к канону**: `PowerShell(Get-ChildItem *)` совпадёт и с `gci`, и с `ls`, и с `dir`. Команда разбирается по синтаксическому дереву и делится по `|`, `;`, а на седьмой версии ещё по `&&` и `||`; каждая часть проверяется отдельно.

У `Remove-Item` своя проверка, **более жёсткая, чем у `rm`**: системные пути и цели с шаблоном — голая `*`, всё, что кончается на `/*` или `\*`, включая `$dir/*`, — запрещаются во всех режимах без вопроса, ещё до классификатора. По обычным правилам режима идёт только случай «рабочая папка или её родитель с рекурсией», и вот он обходом подтверждений снимается.

И отдельно про Windows: любая команда, в аргументах которой есть сетевой путь вида `\\сервер\ресурс\файл`, спросит подтверждение, даже если во всём остальном она безобидна, — такой путь может утащить учётные данные Windows.

### Авто-режим

С 14 августа 2026 это **режим по умолчанию** для новых сессий на Pro, Max и Team. Решение о каждом действии принимает классификатор, а не список правил, и настраивается он отдельным объектом `autoMode`.

| Поле | Тип | Что делает |
|---|---|---|
| `autoMode.environment` | массив строк | Что классификатор должен знать про ваше окружение. Это и заполняет `/auto-mode-setup`. |
| `autoMode.allow` | массив строк | Что он пропускает. |
| `autoMode.soft_deny` | массив строк | О чём он вас спрашивает. |
| `autoMode.hard_deny` | массив строк | Что запрещает без вопросов. |
| `autoMode.classifyAllShell` | boolean | Прогонять ли через классификатор вообще все команды оболочки. По умолчанию нет. |

Три вещи, которые тут важнее самой таблицы.

**Строка `"$defaults"` обязательна почти всегда.** В любом из четырёх списков она подмешивает штатный набор правил. Если её не написать, **весь встроенный список этой секции молча исчезает** — вместе с мягкими блоками на форс-пуш, на `curl | bash`, на деплой в продакшен и на обход самого авто-режима, и с жёстким блоком на утечку данных. Ваши правила должны дополнять набор, а не заменять его.

**Узкие разрешения обходят классификатор.** Правило вроде `Bash(npm test)` в авто-режиме продолжает действовать и разбирается **до** классификатора. Приостанавливаются только широкие разрешения на произвольное выполнение — `Bash(*)`, интерпретаторы со звёздочкой — и все правила, называющие инструмент наблюдения. То есть узкое правило может пропустить разрушительный аргумент, которого никто не посмотрел. Закрывается это `classifyAllShell: true`, и тогда на время авто-режима отключаются все разрешающие правила оболочки.

**Классификатор не читает настройки проекта.** Он берёт `autoMode` только из пользовательского файла, корпоративного и `--settings`. Иначе репозиторий мог бы подсунуть себе разрешения; локальные настройки читались до версии 2.1.207, теперь нет.

Посмотреть и разобрать конфигурацию можно из терминала:

```bash
claude auto-mode config                       # что действует и откуда взялось
claude auto-mode defaults                     # штатные правила всех четырёх списков
claude auto-mode defaults --label 'Git Destructive'   # полный текст одного правила
claude auto-mode critique                     # разбор ваших правил моделью
claude auto-mode reset --yes                  # сбросить к штатным без вопроса
```

Подкоманда `critique` — недооценённая: она просит модель разобрать ваши собственные правила и показать те, что двусмысленны, избыточны или будут давать ложные срабатывания.

Выключается режим ключом `disableAutoMode`, и здесь есть ловушка: **значение должно быть строкой `"disable"`.** Массив или `true` схема пропустит без ошибки, но код сравнивает именно со строкой, и режим тихо останется включённым. Скрыть мастер настройки можно записью `"auto-mode-setup": "off"` в `skillOverrides`; `disableBundledSkills` его не выключает, потому что это встроенная команда, а не навык.

### MCP-серверы

| Параметр | Тип | Что делает |
|---|---|---|
| `enableAllProjectMcpServers` | boolean | Автоматически одобрять все серверы из `.mcp.json` проекта. |
| `enabledMcpjsonServers` | массив имён | Явно одобренные серверы из `.mcp.json`. |
| `disabledMcpjsonServers` | массив имён | Явно отклонённые серверы. |
| `allowedMcpServers` | массив объектов | **[админ]** Белый список: по имени, команде или адресу. Пустой массив — не разрешён ни один. |
| `deniedMcpServers` | массив объектов | **[админ]** Чёрный список. Приоритетнее белого. |
| `allowManagedMcpServersOnly` | boolean | **[админ]** Белый список читается только из политики. |
| `allowAllClaudeAiMcps` | boolean | **[админ]** Грузить облачные коннекторы вместе с управляемым списком. |
| `managedMcpServers` | массив объектов | **[админ]** Сами серверы, разосланные администратором: транспорт, подключение и карта разрешённых инструментов. |

Последняя строка исправляет распространённое утверждение, которое я и сам раньше повторял: «серверы задаются только в `.mcp.json`, а в настройках — лишь права на них». Это верно для вас, но не для администратора: `managedMcpServers` в корпоративных настройках содержит именно конфигурации серверов и раскатывается на всех через файл политики или систему управления устройствами.

Обычные же серверы задаются в `.mcp.json` или через `claude mcp add`.

### Хуки

Хуки — тема на отдельную статью, и она [у меня есть](/ru/claude-code-hooks/): там разобраны все события, форматы обмена и рабочие примеры. Здесь ключи настроек и то, что чаще всего ломается.

`hooks` — объект вида «событие → массив матчеров». У матчера есть фильтр `matcher` и список обработчиков.

```json title=".claude/settings.json"
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          { "type": "command", "command": "npm run lint" },
          { "type": "command", "command": "echo", "args": ["done"] }
        ]
      }
    ]
  }
}
```

Событий тридцать три. По инструментам: `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PostToolBatch`. По разговору: `UserPromptSubmit`, `UserPromptExpansion`, `Stop`, `StopFailure`, `Notification`, `MessageDisplay`. По сессии: `SessionStart`, `SessionEnd`, `Setup`, `InstructionsLoaded`, `ConfigChange`. По сжатию и смене модели: `PreCompact`, `PostCompact`, `PreModelSwitch`, `PostModelSwitch`. По правам: `PermissionRequest`, `PermissionDenied`. По субагентам и задачам: `SubagentStart`, `SubagentStop`, `TeammateIdle`, `TaskCreated`, `TaskCompleted`. По файлам и папкам: `FileChanged`, `CwdChanged`, `DirectoryAdded`, `WorktreeCreate`, `WorktreeRemove`. И две на формы MCP: `Elicitation`, `ElicitationResult`.

Обработчик бывает пяти видов, вид задаётся полем `type`: `command` запускает программу или строку оболочки, `prompt` спрашивает маленькую быструю модель, `agent` отправляет полноценного агента, `http` дёргает адрес, `mcp_tool` вызывает инструмент MCP-сервера. Общие необязательные поля — `if` с условием, `timeout`, `statusMessage` для спиннера, `once` для однократного выполнения за сессию и `async` с родственным `asyncRewake`.

| Параметр | Тип | Что делает |
|---|---|---|
| `hooks` | объект | Сами хуки. |
| `disableAllHooks` | boolean | Отключить все хуки и выполнение строки состояния. |
| `allowManagedHooksOnly` | boolean | **[админ]** Выполнять только хуки из политики. |
| `allowedHttpHookUrls` | массив строк | **[админ]** Белый список адресов для HTTP-хуков. |
| `httpHookAllowedEnvVars` | массив строк | Какие переменные окружения HTTP-хуки могут подставлять в заголовки. |
| `disableSkillShellExecution` | boolean | Запретить встроенные вызовы оболочки в навыках и своих командах. |

#### Три вещи, из-за которых хук «работает, но ничего не делает»

**Код выхода 1 ничего не блокирует.** Блокирует только код 2, и только примерно на трети событий. Единица и любой другой ненулевой код на большинстве событий — это просто неблокирующая ошибка в журнале. Код 2 при этом сильнее вашего же JSON: даже если вы вернули решение «разрешить», двойка запретит.

Где двойка блокирует: `PreToolUse`, `UserPromptSubmit` (стирая промпт), `UserPromptExpansion`, `Stop`, `SubagentStop`, `TeammateIdle`, `TaskCreated`, `TaskCompleted`, `ConfigChange`, `PostToolBatch`, `PreModelSwitch`. Где игнорируется: `PermissionRequest` и `PermissionDenied` — там решают поля JSON, — и `StopFailure`. На `PostToolUse` двойка не блокирует, а показывается модели. На `WorktreeCreate` прерывает **любой** ненулевой код. И отдельная асимметрия: истёкший таймаут на `PreToolUse` не блокирует, а на `PreModelSwitch` — блокирует.

**Вывод хука модель почти никогда не видит.** Обычный текст в стандартный вывод при коде 0 попадает в отладочный журнал, а не в разговор. Модели он показывается ровно на четырёх событиях: `UserPromptSubmit`, `UserPromptExpansion`, `SessionStart` и `PostModelSwitch`. Поток ошибок не показывается нигде и никогда. На остальных событиях передать что-то модели можно только структурированным ответом — полем дополнительного контекста или системным сообщением. JSON при этом разбирается, только если вывод начинается с `{` и заканчивается `}`.

**Фильтр иногда игнорируется целиком, а иногда это регулярное выражение.** `"*"`, пустая строка или отсутствие поля означают «все». Фильтр, состоящий только из букв, цифр, `_`, `-`, пробелов, запятых и `|`, — это точное совпадение или перечисление. Любой другой символ превращает его в регулярное выражение, которое проверяется **без привязки к началу и концу**, если вы не написали их сами. Регистр учитывается.

И фильтр не всегда про имя инструмента. На `SessionStart` он сравнивается со способом старта, на `SessionEnd` — с причиной завершения, на сжатии — с `manual` или `auto`, на `ConfigChange` — с тем, какой файл настроек изменился, на `FileChanged` — с именем файла, на смене модели — с каноническим именем модели. А события `UserPromptSubmit`, `PostToolBatch`, `Stop`, `CwdChanged`, `TeammateIdle`, задачи, рабочие копии и `MessageDisplay` фильтра **не принимают вовсе** и молча игнорируют написанный.

Таймауты по умолчанию неодинаковые: у `command`, `http` и `mcp_tool` — десять минут, но на `UserPromptSubmit` и на событиях смены модели тридцать секунд, а на `MessageDisplay` десять; у `prompt` — тридцать секунд, у `agent` — минута; всем хукам `SessionEnd` вместе отводится полторы секунды. Асинхронные не ограничены вовсе.

На Windows стоит помнить про форму с отдельным списком аргументов: она выполняется без оболочки, и ей нужен настоящий исполняемый файл — обёртки `.cmd` и `.bat` требуют либо строковой формы, либо запуска через интерпретатор.

### Git: коммиты, pull request, атрибуция

| Параметр | Тип | Что делает |
|---|---|---|
| `attribution` | объект | Текст атрибуции в коммитах и описаниях; пустая строка прячет её. Поле `sessionUrl` управляет ссылкой на сессию. |
| `includeCoAuthoredBy` | boolean | **[устар]** Добавлять соавторство. Лучше использовать `attribution`. |
| `includeGitInstructions` | boolean | Включать встроенные инструкции по коммитам в системный промпт. По умолчанию да. |
| `prUrlTemplate` | строка | Шаблон ссылки на pull request: `{host}`, `{owner}`, `{repo}`, `{number}`, `{url}`. |
| `doneMeansMerged` | boolean | **[эксп]** «Готово значит смержено»: агент продолжает, пока pull request не готов к слиянию. |

```json title=".claude/settings.json"
{
  "attribution": { "commit": "", "pr": "" },
  "includeGitInstructions": true
}
```

### Интерфейс и терминал

| Параметр | Тип | Что делает |
|---|---|---|
| `theme` | см. ниже | Цветовая тема. |
| `editorMode` | `normal`, `vim` | Режим клавиш в поле ввода. Заменил убранную команду `/vim`. |
| `keybindingFlavor` | `classic`, `readline` | Как ведут себя словесные клавиши. `readline` — как в Bash: стирание до пробела, переходы по словам, пунктуация разделяет слова. |
| `vimInsertModeRemaps` | объект | Свои выходы из режима вставки, например `{"jj": "<Esc>"}`. |
| `emojiCompletionEnabled` | boolean | Автодополнение эмодзи в поле ввода. По умолчанию включено. |
| `wheelScrollAccelerationEnabled` | boolean | Ускорение прокрутки колесом. Только в полноэкранном режиме. |
| `defaultView` | `chat`, `transcript` | С какого вида открывается сессия. |
| `axScreenReader` | boolean | Плоский вывод для экранных читалок. |
| `tui` | `default`, `fullscreen` | Рендерер интерфейса. |
| `viewMode` | `default`, `verbose`, `focus` | Режим просмотра транскрипта на старте. |
| `verbose` | boolean | Полный вывод инструментов вместо сокращённых сводок. |
| `autoScrollEnabled` | boolean | Автопрокрутка диалога вниз. Только в полноэкранном режиме. |
| `syntaxHighlightingDisabled` | boolean | Выключить подсветку синтаксиса в диффах. |
| `prefersReducedMotion` | boolean | Уменьшить или убрать анимации. |
| `showTurnDuration` | boolean | Показывать длительность после каждого хода. |
| `showMessageTimestamps` | boolean | Штамповать сообщения временем прихода. |
| `terminalProgressBarEnabled` | boolean | Слать прогресс длинных операций управляющими последовательностями терминала. |
| `terminalTitleFromRename` | boolean | Пусть `/rename` меняет заголовок вкладки. По умолчанию да. |
| `spinnerTipsEnabled` | boolean | Показывать подсказки в спиннере ожидания. |
| `spinnerVerbs` | объект | Свои глаголы спиннера: добавить к стандартным или заменить их. |
| `spinnerTipsOverride` | объект | Свои подсказки: списком, файлом или со своим заголовком вместо «Tip». |
| `footerLinksRegexes` | массив объектов | Свои значки-ссылки в подвале по регулярному выражению. Максимум пять. |
| `spellcheck` | объект | Подчёркивать опечатки в поле ввода. Нужен установленный проверятор: `aspell`, `hunspell` или `ispell`. |
| `companyAnnouncements` | массив строк | Объявления на старте; если их несколько, показывается случайное. |
| `todoFeatureEnabled` | boolean | Включить панель отслеживания задач. |

Значения `theme`: `auto` (по фону терминала), `dark`, `light`, `light-daltonized`, `dark-daltonized`, `light-ansi`, `dark-ansi`, а также `custom:<имя>` для темы из `~/.claude/themes/` и `custom:<плагин>:<имя>` для темы из плагина.

Часть ключей читается только из пользовательского файла, `--settings` и политики: `spinnerTipsOverride` с файлом подсказок, `footerLinksRegexes` и `spellcheck`. Проектный файл их переопределить не может — иначе репозиторий смог бы дорисовать вам в интерфейс произвольную ссылку.

### Настройки, живущие в `~/.claude.json`

Эти ключи в `settings.json` игнорируются молча. Обычно их пишет сам Claude Code или `/config`, но знать про них полезно.

| Параметр | Тип | Что делает |
|---|---|---|
| `permissionExplainerEnabled` | boolean | **[глобальный]** Ctrl+E на диалоге разрешения показывает разбор команды: что делает, зачем и что может пойти не так, с оценкой риска. По умолчанию включено. |
| `diffTool` | `auto`, `terminal` | **[глобальный]** Где показывать дифф правки, если подключена IDE. По умолчанию в IDE. |
| `autoConnectIde` | boolean | **[глобальный]** Подключаться к запущенной IDE автоматически при старте из внешнего терминала. По умолчанию нет. |
| `autoInstallIdeExtension` | boolean | **[глобальный]** Ставить расширение автоматически при запуске из терминала VS Code. По умолчанию да. |
| `externalEditorContext` | boolean | **[глобальный]** При правке промпта во внешнем редакторе по Ctrl+G показывать прошлый ответ комментариями в начале буфера. |
| `skippedMarketplaces` | массив строк | **[глобальный]** Маркетплейсы, установку которых вы отклонили. |
| `skippedPlugins` | массив строк | **[глобальный]** Плагины, установку которых вы отклонили. |

Первый ключ стоит того, чтобы про него узнать: сочетание Ctrl+E на вопросе о запуске команды даёт человеческий разбор того, что эта команда делает, — без её выполнения. На незнакомой команде из чужого репозитория это ровно та кнопка, которой не хватает.

### Строка состояния

| Параметр | Тип | Что делает |
|---|---|---|
| `statusLine` | объект | Своя строка состояния внизу, которую рисует внешний скрипт. |
| `subagentStatusLine` | объект | Строка состояния для каждого субагента в панели агентов. |

Поля `statusLine`: `type` со значением `"command"`, `command` со скриптом, `padding`, `refreshInterval` — пересчитывать раз в столько секунд, — и `hideVimModeIndicator`, если скрипт рисует режим vim сам.

```json title=".claude/settings.json"
{
  "statusLine": {
    "type": "command",
    "command": "~/.claude/statusline.sh",
    "padding": 1,
    "refreshInterval": 5
  }
}
```

Скрипту приходит на вход JSON с контекстом сессии: модель, папка, стоимость, заполненность контекста. Печатает он одну строку. Это, пожалуй, самая недооценённая настройка: постоянно видимые цифры расхода меняют поведение сильнее, чем любые инструкции об экономии. Учтите только, что `disableAllHooks` выключает и её.

### Контекст, память, сессии

| Параметр | Тип | Что делает |
|---|---|---|
| `cleanupPeriodDays` | число от 1 | Сколько дней хранить транскрипты. По умолчанию тридцать. Заодно определяет срок жизни контрольных точек. |
| `desktopSessionCleanupPeriodDays` | число от 0 | Потолок для исключения, по которому сессии desktop-приложения переживают обычную очистку. |
| `crossSessionInbound` | `accept`, `hold`, `refuse` | Что делать с сообщениями от других ваших сессий. |
| `dialogExpiry` | `60s`, `5m`, `10m`, `never` | Через сколько протухает неотвеченный диалог. По умолчанию пять минут. |
| `askUserQuestionTimeout` | те же значения | То же для вопросов агента к вам. По умолчанию не протухают. |
| `autoContinueAtUsageLimit` | boolean | Продолжать сессию, когда сбросится лимит тарифа. **По умолчанию включено.** |
| `autoMemoryEnabled` | boolean | Автоматическая память проекта. |
| `autoMemoryDirectory` | строка, путь | Папка хранилища автопамяти. Читается из любого уровня настроек. |
| `autoDreamEnabled` | boolean | Фоновая консолидация памяти. |
| `fileCheckpointingEnabled` | boolean | Снимать копии файлов перед правками, чтобы `/rewind` мог их восстановить. |
| `outputStyle` | строка | Стиль ответов ассистента. |
| `language` | строка | Предпочтительный язык ответов и голосового ввода, например `"russian"`. |
| `promptSuggestionEnabled` | boolean | Показывать подсказки для промптов. |
| `awaySummaryEnabled` | boolean | **[эксп]** Резюме сессии при возвращении после отсутствия дольше пяти минут. |
| `showClearContextOnPlanAccept` | boolean | Предлагать очистку контекста при принятии плана. По умолчанию нет. |
| `plansDirectory` | строка, путь | Папка для файлов планов относительно корня проекта. |
| `claudeMd` | строка | **[админ]** Инструкции в стиле `CLAUDE.md` как организационная память. |
| `claudeMdExcludes` | массив шаблонов | Какие файлы `CLAUDE.md` не загружать. Файл политики исключить нельзя. |
| `respectGitignore` | boolean | Файловый пикер учитывает `.gitignore`. По умолчанию да; `.ignore` учитывается всегда. |
| `fileSuggestion` | объект | Свой источник подсказок файлов для упоминаний через `@`. |

Про `autoContinueAtUsageLimit` стоит знать две вещи: он включён по умолчанию и читается только из пользовательского файла, `--settings` и политики — то есть проектный или локальный файл, который его задаёт, не игнорируется, а **выключает** возможность.

### Навыки

| Параметр | Тип | Что делает |
|---|---|---|
| `skillOverrides` | объект | Видимость навыка: `on`, `name-only` — только имя без описания, `user-invocable-only` — скрыть от модели, но оставить вызов по имени, `off` — скрыть полностью. |
| `skillListingMaxDescChars` | число | Лимит символов на описание навыка в листинге. По умолчанию 1536. |
| `skillListingBudgetFraction` | число 0–1 | Доля контекста под весь листинг навыков. По умолчанию один процент. |
| `disableSkillShellExecution` | boolean | Запретить встроенные вызовы оболочки в навыках и своих командах. |
| `disableBundledSkills` | boolean | Не загружать встроенные навыки. Исключение — `/doctor`. |
| `syncClaudeAiSkills` | boolean | Тянуть ли навыки, синхронизированные с claude.ai. Учитывается только значение `false`. |
| `syncClaudeAiPlugins` | boolean | То же для плагинов. |

`skillOverrides` стоит знать всем, у кого много навыков: их описания висят в контексте постоянно, и `name-only` для редко нужных освобождает заметный кусок. Тот же ключ — способ запретить агенту самому запускать конкретную команду, оставив её вам: значение `user-invocable-only`.

### Плагины и маркетплейсы

| Параметр | Тип | Что делает |
|---|---|---|
| `enabledPlugins` | объект | Какие плагины включены; ключ — `плагин@маркетплейс`. |
| `pluginConfigs` | объект | Конфигурация каждого плагина. **В проектных настройках игнорируется.** |
| `extraKnownMarketplaces` | объект | Дополнительные маркетплейсы для этого репозитория. |
| `strictKnownMarketplaces` | массив источников | **[админ]** Только эти источники можно добавлять. Поддерживает `owner/*` — вся организация. |
| `blockedMarketplaces` | массив источников | **[админ]** Заблокированные источники. |
| `pluginSuggestionMarketplaces` | массив строк | **[админ]** Чьи плагины могут попадать в подсказки на установку. |
| `strictPluginOnlyCustomization` | boolean или массив | **[админ]** Запретить кастомизацию вне плагинов для `skills`, `agents`, `hooks`, `mcp`. |
| `pluginTrustMessage` | строка | **[админ]** Дополнительный текст к предупреждению перед установкой. |
| `disableCommandPluginSources` | boolean | **[админ]** Запретить маркетплейсы вида «локальная команда печатает путь к плагину». |
| `disableSideloadFlags` | boolean | **[админ]** Запретить подсовывать плагины флагами. |

### Воркфлоу, агенты, тиммейты

| Параметр | Тип | Что делает |
|---|---|---|
| `enableWorkflows` | boolean | Включить или выключить воркфлоу. |
| `disableWorkflows` | boolean | Выключить воркфлоу. |
| `workflowKeywordTriggerEnabled` | boolean | Слово «ultracode» в промпте включает воркфлоу на ход. По умолчанию да. |
| `skipWorkflowUsageWarning` | boolean | **[эксп]** Предупреждение о стоимости мульти-агентных воркфлоу принято. |
| `workflowSizeGuideline` | `unrestricted`, `small`, `medium`, `large` | Ориентир по размеру вееров: меньше пяти агентов, меньше пятнадцати, меньше пятидесяти или без подсказки. |
| `disableAgentView` | boolean | **[админ]** Выключить экран агентов, фоновый запуск и фоновую службу. |
| `disableAutoMode` | `"disable"` | Выключить авто-режим. Только строкой. |
| `teammateMode` | `in-process`, `tmux`, `iterm2`, `auto` | Как показываются тиммейты. По умолчанию `in-process`. |

Значение `auto` у `teammateMode` определено точно: разделённые панели, если сессия идёт внутри tmux, или внутри iTerm2 с доступной утилитой командной строки, или если tmux установлен; иначе всё выполняется внутри процесса. Значение `iterm2` — родные разделённые панели iTerm2, появилось в 2.1.186.

Ключ `teammateDefaultModel` в схеме ещё есть, но **из продукта убран в 2.1.234** и ни на что не влияет.

### Worktree

Вложенный объект `worktree` управляет тем, как заводятся отдельные рабочие копии под сессии и фоновых агентов.

| Поле | Тип | Что делает |
|---|---|---|
| `symlinkDirectories` | массив строк | Что симлинкать из основного репозитория, чтобы не раздувать диск. По умолчанию ничего. |
| `sparsePaths` | массив строк | Какие пути включать через разреженную выгрузку. Сильно ускоряет в монорепозиториях. |
| `baseRef` | `fresh`, `head` | От чего ветвятся новые копии: от удалённой основной ветки или от локального состояния. |
| `bgIsolation` | `worktree`, `none` | Изоляция фоновых сессий. По умолчанию фоновый агент не правит основное дерево. |
| `location` | строка, путь | Где desktop-приложение создаёт копии для сессий по SSH. **CLI её пока не читает.** |

```json title=".claude/settings.json"
{
  "worktree": {
    "symlinkDirectories": ["node_modules", ".cache"],
    "sparsePaths": ["packages/app", "packages/shared"],
    "baseRef": "fresh",
    "bgIsolation": "worktree"
  }
}
```

### Удалённое управление, SSH, окружения

| Параметр | Тип | Что делает |
|---|---|---|
| `disableRemoteControl` | boolean | **[админ]** Выключить удалённое управление целиком. |
| `remoteControlAtStartup` | boolean | Поднимать мост удалённого управления в каждой сессии. |
| `isolatePeerMachines` | boolean | Требовать подтверждения, прежде чем сообщение уйдёт в сессию на другой машине. |
| `autoUploadSessions` | boolean | Зеркалить локальные сессии в веб только для просмотра. |
| `daemonColdStart` | `transient`, `ask` | Когда фоновой службы нет: поднять на сессию или предложить установить постоянно. |
| `remote` | объект | Окружение по умолчанию для удалённых сессий. |
| `sshConfigs` | массив объектов | **[админ]** Преднастроенные SSH-подключения: `id`, `name`, `sshHost`, `sshPort`, `sshIdentityFile`, `startDirectory`. |
| `sshHostAllowlist` | массив шаблонов | **[админ]** Ограничить SSH-сессии приложения этими хостами. `*` — любой, `*.example.com` — домен и поддомены. |
| `disableDesktopLocalSessions` | boolean | **[админ]** Запретить сессии на самой машине в desktop-приложении: работать только по SSH. |
| `browserExternalPageTools` | `"disabled"` | **[админ]** Запретить агенту читать и трогать внешние страницы в браузере приложения. Локальные предпросмотры работают. |
| `disableBrowserExternalNavigation` | boolean | **[админ]** Запретить внешнюю навигацию в браузере приложения и агенту, и человеку. |
| `disableMobileSimulatorTools` | boolean | **[админ]** Отобрать у агента инструменты симулятора iOS; человеку панель остаётся. |
| `requireCoworkFullVmSandbox` | boolean | **[админ]** Выполнять инструменты в изолированной виртуальной машине. |
| `channelsEnabled` | boolean | **[админ]** Разрешить канальные уведомления. |
| `allowedChannelPlugins` | массив объектов | **[админ]** Белый список канальных плагинов. |

Три из этих ключей принимают **только настоящее булево `true`**: строка `"true"` или единица будут проигнорированы с предупреждением в журнале. Это `disableDesktopLocalSessions`, `disableBrowserExternalNavigation` и `disableMobileSimulatorTools`. Терминальный CLI их не читает вовсе — они про desktop-приложение.

Про `requireCoworkFullVmSandbox` есть важный побочный эффект: внутри полной виртуальной машины **нет ни политики устройства, ни файла корпоративных настроек** — доставлять их туда придётся иначе.

```json title=".claude/settings.json"
{
  "remote": { "defaultEnvironmentId": "env-123" },
  "sshConfigs": [
    {
      "id": "prod-box",
      "name": "Prod",
      "sshHost": "deploy@prod.example.com",
      "sshPort": 22,
      "startDirectory": "~/app"
    }
  ]
}
```

### Уведомления, голос, перерывы

| Параметр | Тип | Что делает |
|---|---|---|
| `preferredNotifChannel` | `auto`, `iterm2`, `terminal_bell`, `iterm2_with_bell`, `kitty`, `ghostty`, `notifications_disabled` | Каким каналом слать системные уведомления. |
| `inputNeededNotifEnabled` | boolean | Пуш на телефон, когда ждёт подтверждение или вопрос. |
| `agentPushNotifEnabled` | boolean | Разрешить агенту слать проактивные мобильные пуши. |
| `voice` | объект | Голосовой ввод: `enabled`, `mode` со значением `hold` или `tap`, `autoSubmit`. |
| `voiceEnabled` | boolean | Диктовка при входе через claude.ai, если политика организации это разрешает. **Не то же самое, что `voice.enabled`,** который её перекрывает. |
| `breakReminder` | объект | **[эксп]** Напоминание о перерыве после долгой непрерывной работы. Никогда не блокирует. |
| `quietHours` | объект | **[эксп]** Тихие часы: один мягкий намёк за сессию внутри заданного окна местного времени. |

```json title=".claude/settings.json"
{
  "voice": { "enabled": true, "mode": "hold", "autoSubmit": true },
  "breakReminder": { "enabled": true, "intervalMinutes": 120 },
  "quietHours": { "enabled": true, "start": "22:00", "end": "07:00" }
}
```

### Песочница и сеть

Объект `sandbox` управляет тем, что разрешено процессам внутри изоляции. Самый длинный раздел схемы и самый редко используемый — но если вы пускаете агента в режиме, где он не спрашивает разрешений, читать надо именно его.

Сразу исправлю распространённую ошибку в структуре: пути на чтение и запись лежат **не прямо в `sandbox`, а в `sandbox.filesystem`.** Правило `"sandbox": {"denyRead": [...]}` не сработает.

| Поле | Тип | Что делает |
|---|---|---|
| `enabled` | boolean | Включить песочницу. |
| `enabledPlatforms` | массив `macos`, `linux`, `wsl`, `windows` | **[админ]** Ограничить всю конфигурацию этими системами. На остальных она инертна целиком. |
| `autoAllowBashIfSandboxed` | boolean | Автоматически разрешать команды, если они выполняются в песочнице. |
| `allowUnsandboxedCommands` | boolean | Разрешить повторить заблокированную команду вне песочницы. **По умолчанию `true`.** |
| `failIfUnavailable` | boolean | Падать, если песочницу поднять не удалось, вместо тихого запуска без неё. |
| `excludedCommands` | массив строк | Команды, выведенные из песочницы; их задаёт `/sandbox exclude`. |
| `ignoreViolations` | объект | Какие нарушения не показывать. |
| `filesystem.allowWrite` | массив путей | Дополнительные пути, куда разрешена запись. |
| `filesystem.denyWrite` | массив путей | Пути, запрещённые для записи, в том числе внутри разрешённой папки. |
| `filesystem.denyRead` | массив путей | Пути, запрещённые для чтения. |
| `filesystem.allowRead` | массив путей | Исключения, снова разрешающие чтение внутри запрещённых областей. |
| `filesystem.allowManagedReadPathsOnly` | boolean | **[админ]** Пути на чтение берутся только из политики. |
| `filesystem.disabled` | boolean | Отключить файловую часть песочницы. Не из проектных настроек. |
| `network.allowedDomains` | массив строк | Разрешённые домены. |
| `network.deniedDomains` | массив строк | Всегда блокируемые домены. |
| `network.allowManagedDomainsOnly` | boolean | **[админ]** Разрешать только домены из политики. |
| `network.strictAllowlist` | boolean | Разрешать только явно перечисленные домены. |
| `network.allowUnixSockets` | массив строк | Разрешённые сокеты Unix. Только macOS. |
| `network.allowAllUnixSockets` | boolean | Разрешить все сокеты Unix. |
| `network.allowLocalBinding` | boolean | Разрешить локальную привязку портов. |
| `network.allowMachLookup` | массив строк | Разрешённые сервисы Mach. Только macOS, звёздочка допустима лишь в конце. |
| `network.httpProxyPort` | число | Порт внутреннего HTTP-прокси песочницы. |
| `network.socksProxyPort` | число | Порт внутреннего SOCKS-прокси. |
| `network.tlsTerminate` | объект | **[эксп]** Терминировать TLS своим удостоверяющим центром — нужно для маскировки секретов. |
| `credentials.envVars` | массив объектов | Что делать с секретами в переменных: `deny` или `mask`, плюс извлечение и разбор. |
| `credentials.files` | массив объектов | То же для файлов с секретами. |
| `credentials.awsPairs` | массив объектов | Пары переменных AWS, которые песочница переподписывает. |
| `credentials.sigv4` | объект | Что делать с формами запросов AWS, которые нельзя переподписать: потоковой загрузкой, предподписанным адресом и асимметричной подписью. Каждое поле — `deny` или `passthrough`; по умолчанию всё запрещено. |
| `credentials.allowPlaintextInject` | boolean | Разрешить подставлять секреты открытым текстом. По умолчанию нет. |
| `allowAppleEvents` | boolean | Разрешить Apple Events. Только macOS. |
| `enableWeakerNetworkIsolation` | boolean | **Ослабляет защиту.** Более слабая сетевая изоляция на macOS. |
| `enableWeakerNestedSandbox` | boolean | **Ослабляет защиту.** Разрешить вложенную песочницу послабее. |
| `bwrapPath` | строка, абсолютный путь | **[админ]** Свой бинарник bubblewrap на Linux. |
| `socatPath` | строка, абсолютный путь | **[админ]** Свой бинарник socat. |
| `ripgrep` | объект | Свой ripgrep для песочницы. Проектные настройки его не переопределяют. |

Три вещи стоит выделить.

**`allowUnsandboxedCommands` по умолчанию включён.** То есть заблокированную песочницей команду агент может повторить снаружи через специальный параметр. Если вы включали песочницу ради изоляции, это, скорее всего, не то, чего вы хотели, — выключается явным `false`.

**`enabledPlatforms` делает конфигурацию инертной целиком.** На системе не из списка не будет ни песочницы, ни автоматических разрешений, ни предупреждения при старте, ни падения по `failIfUnavailable`. Тихо, как будто раздела и нет.

**Маскировка секретов работает не везде.** На macOS и Windows режим `mask` вырождается в `deny`: подменить значение на лету там нечем. У записей маскировки есть ещё поле `onExtractNoMatch` — что делать, если регулярное выражение ничего не нашло: `warn` (по умолчанию) пропустит переменную немаскированной, `deny` уберёт её внутри песочницы, `error` остановит запуск.

```json title=".claude/settings.json"
{
  "sandbox": {
    "enabled": true,
    "autoAllowBashIfSandboxed": true,
    "allowUnsandboxedCommands": false,
    "network": {
      "allowedDomains": ["api.example.com", "*.githubusercontent.com"],
      "deniedDomains": ["telemetry.example.com"]
    },
    "filesystem": {
      "denyRead": ["~/.ssh", "~/.aws"],
      "denyWrite": ["~/.config"]
    }
  }
}
```

### Обновления и всё остальное

| Параметр | Тип | Что делает |
|---|---|---|
| `autoUpdatesChannel` | `latest`, `stable`, `rc` | Канал автообновлений. |
| `minimumVersion` | строка | Не даёт откатиться ниже указанной версии при переключении каналов. |
| `requiredMinimumVersion` | строка | **[админ]** Ниже этой версии организация работать не даёт. |
| `requiredMaximumVersion` | строка | **[админ]** Потолок версии для организации. |
| `managedSourcesBehavior` | `first-wins`, `merge` | **[админ]** Как складываются несколько источников политики. |
| `wslInheritsWindowsSettings` | boolean | **[админ, Windows]** WSL читает политику из полной цепочки политик Windows. |
| `processWrapper` | строка | **[админ]** Чем оборачивать порождаемые процессы. |
| `allowManagedPermissionRulesOnly` | boolean | **[админ]** Учитывать правила прав только из политики. |
| `defaultShell` | `bash`, `powershell` | Оболочка для команд, вводимых через `!`. По умолчанию `bash` на всех платформах. |
| `respondToBashCommands` | boolean | Отвечать на команды, введённые через `!`. По умолчанию да. |
| `feedbackSurveyRate` | число 0–1 | Вероятность показа опроса о качестве сессии. |
| `feedbackDrafts` | `notify`, `quiet`, `off` | Может ли агент сам готовить черновик отзыва. Отправляете всё равно вы. |
| `enableArtifact` | boolean | Публикация артефактов. Выключение в любом слое побеждает. |
| `disableArtifact` | boolean | **[устар]** Обратный по смыслу предшественник: `true` выключает, `false` игнорируется. |
| `disableClaudeAiConnectors` | boolean | Не грузить облачные коннекторы. |
| `skipWebFetchPreflight` | boolean | Пропустить проверку списка запрещённых адресов в строгих корпоративных средах. |
| `$schema` | строка | Ссылка на схему настроек: автодополнение и проверка в редакторе. |

Схема принимает ещё несколько служебных ключей: `modelProposedGoals`, `totalTokensReminder` с родственниками и `disableDeepLinkRegistration`. Они внутренние, в интерфейсе не появляются и нигде не описаны.

## Переменные окружения

Блок `env` в настройках — это объект «имя → значение». **Все значения строки**: числа и флаги пишутся в кавычках, `"PORT": "3000"`, флаг — `"1"`.

Честная оговорка о полноте: официальная документация перечисляет по именам **триста сорок девять** переменных, включая по регионам на каждую модель у каждого провайдера и весь набор телеметрии. Пересказывать их здесь бессмысленно. Ниже — те, что реально используются, плюс поведение блока `env`, которое нигде не собрано в одном месте.

```json title=".claude/settings.json"
{
  "env": {
    "CLAUDE_CODE_USE_POWERSHELL_TOOL": "1",
    "ANTHROPIC_MODEL": "claude-opus-5",
    "BASH_DEFAULT_TIMEOUT_MS": "120000",
    "DISABLE_TELEMETRY": "1"
  }
}
```

### Как ведёт себя блок `env`

**Он побеждает экспорт из оболочки.** Значение из файла настроек записывается в окружение процесса поверх унаследованного. Это ровно обратно тому, что обычно ожидают.

**Удалить переменную нельзя** — можно выставить пустую строку. При выборе провайдера пустое значение считается незаданным, но дочерние процессы получат именно пустую строку.

**Значения перечитываются на ходу**, когда меняется файл, — кроме подсистем, настраиваемых только при запуске, вроде телеметрии. А `/cd` с версии 2.1.246 накладывает `env` новой папки поверх старой.

**Проектным и локальным настройкам разрешено не всё.** Отбрасываются три группы: переменные, задающие расположение файлов (`CLAUDE_CONFIG_DIR`, `CLAUDE_CODE_TMPDIR`, `HOME`, `TMPDIR`, `TMP`, `TEMP`, `XDG_*`); переменные, включающие выгрузку содержимого сессии (`OTEL_LOG_RAW_API_BODIES`, `ENABLE_BETA_TRACING_DETAILED`, `BETA_TRACING_ENDPOINT`); и переменные, влияющие на запуск и синхронизацию (`CLAUDE_CODE_PROCESS_WRAPPER`, `CLAUDE_CODE_SYNC_SKILLS`, `CLAUDE_CODE_SYNC_PLUGINS`, кэш и seed-папка плагинов). Список расширился как раз в 2.1.251. Предупреждение об этом видно только под отладкой.

Ещё несколько переменных игнорируются в **любом** файле и читаются только из окружения запуска: `CLAUDE_CODE_REMOTE`, `CLAUDE_CODE_ACCOUNT_UUID`, сокет и токен межсессионного обмена, `CLAUDE_CODE_PROJECT_DIR_NAME` и `CLAUDE_CODE_RESTRICTED`.

**И обратное направление, о котором почти не пишут: Claude Code сам выставляет переменные дочерним процессам.** Их видно из хуков и из любого запущенного скрипта: `CLAUDECODE=1`, `CLAUDE_CODE_CHILD_SESSION=1`, `CLAUDE_CODE_SESSION_ID`, `CLAUDE_PID` — собственный идентификатор процесса, `CLAUDE_EFFORT` с текущим уровнем усилий (режим `ultracode` показывается как `xhigh`), а в облачных сессиях `CLAUDE_CODE_REMOTE=true` и идентификатор удалённой сессии. Хук, которому нужно знать уровень усилий или отличить дочернюю сессию от основной, берёт это отсюда, а не гадает.

### Провайдеры и аутентификация

| Переменная | Что делает |
|---|---|
| `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN` | Ключ и токен Anthropic API. |
| `CLAUDE_CODE_OAUTH_TOKEN` | Токен подписки — вход без интерактивного логина. |
| `ANTHROPIC_BASE_URL` | Свой базовый адрес API: прокси или шлюз. |
| `ANTHROPIC_CUSTOM_HEADERS` | Дополнительные HTTP-заголовки к API. |
| `ANTHROPIC_BETAS` | Beta-заголовки в запросах. |
| `CLAUDE_CODE_USE_BEDROCK`, `CLAUDE_CODE_USE_VERTEX` | Включить Amazon Bedrock или Google Cloud как провайдера. |
| `ANTHROPIC_BEDROCK_REGION_PREFIX` | Какой межрегиональный профиль предпочесть вместо выведенного из региона AWS. |
| `ANTHROPIC_BEDROCK_BASE_URL`, `ANTHROPIC_VERTEX_BASE_URL` | Свои адреса провайдеров. |
| `AWS_BEARER_TOKEN_BEDROCK`, `ANTHROPIC_VERTEX_PROJECT_ID` | Учётные данные Bedrock и проект Google Cloud. |
| `CLAUDE_CODE_SKIP_BEDROCK_AUTH`, `CLAUDE_CODE_SKIP_VERTEX_AUTH` | Пропустить авторизацию провайдера, когда её делает шлюз. |
| `HTTPS_PROXY`, `HTTP_PROXY`, `NO_PROXY` | Прокси для исходящего трафика. |
| `NODE_EXTRA_CA_CERTS` | Свой корневой сертификат для корпоративного прокси. |

Провайдеров, кстати, не два и не три: кроме Anthropic API, Amazon Bedrock и Google Cloud поддерживаются Microsoft Foundry и Claude Platform на AWS, и у каждого свой набор переменных и своё соответствие алиасов моделям.

### Модели, контекст, лимиты

| Переменная | Что делает |
|---|---|
| `ANTHROPIC_MODEL` | Основная модель. Перекрывает ключ `model` из файлов. |
| `ANTHROPIC_DEFAULT_MODEL` | Модель для новых сессий; действует, только если `model` не задан нигде. |
| `ANTHROPIC_DEFAULT_OPUS_MODEL` и такие же для sonnet, haiku и fable | Что стоит за алиасами. |
| `ANTHROPIC_SMALL_FAST_MODEL` | **[устар]** Малая быстрая модель. Заменена на `ANTHROPIC_DEFAULT_HAIKU_MODEL`. |
| `CLAUDE_CODE_SUBAGENT_MODEL` | Модель для субагентов. |
| `CLAUDE_CODE_EFFORT_LEVEL` | Уровень усилий. **Перекрывает `--effort` и `/effort`.** |
| `MAX_THINKING_TOKENS` | Лимит токенов на размышления. |
| `CLAUDE_CODE_MAX_OUTPUT_TOKENS`, `MAX_MCP_OUTPUT_TOKENS` | Лимит выходных токенов и вывода MCP. |
| `CLAUDE_CODE_DISABLE_1M_CONTEXT` | Не использовать окно на миллион токенов. |
| `CLAUDE_CODE_MAX_CONTEXT_TOKENS` | Свой потолок контекстного окна. |
| `CLAUDE_CODE_AUTO_COMPACT_WINDOW`, `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` | Окно автосжатия в токенах и в процентах. |
| `DISABLE_AUTO_COMPACT` | Выключить автосжатие. |
| `DISABLE_PROMPT_CACHING` | Выключить кэширование промпта. |
| `API_TIMEOUT_MS`, `CLAUDE_CODE_MAX_RETRIES` | Таймаут запроса к API и число повторов. |

### Поведение и среда

| Переменная | Что делает |
|---|---|
| `CLAUDE_CONFIG_DIR` | Другая папка конфигурации целиком. |
| `CLAUDE_CODE_PROJECT_DIR_NAME` | Короткое имя папки транскриптов и автопамяти проекта. **Задаётся только вместе с `CLAUDE_CONFIG_DIR`** и только из окружения запуска. |
| `CLAUDE_CODE_TMPDIR` | Каталог для временных файлов. |
| `CLAUDE_CODE_USE_POWERSHELL_TOOL` | Использовать инструмент PowerShell вместо bash. |
| `CLAUDE_CODE_GIT_BASH_PATH` | Путь к Git Bash на Windows. |
| `CLAUDE_CODE_SHELL`, `CLAUDE_CODE_SHELL_PREFIX` | Оболочка и префикс к командам оболочки. |
| `CLAUDE_ENV_FILE` | Скрипт, выполняемый перед каждой командой оболочки **в том же процессе** — так переживают вызовы активации виртуального окружения. |
| `CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR` | Возвращаться в исходную папку после каждой команды: `cd` внутри вызова не сохраняется. |
| `BASH_DEFAULT_TIMEOUT_MS`, `BASH_MAX_TIMEOUT_MS` | Таймаут команд по умолчанию и максимальный. |
| `BASH_MAX_OUTPUT_LENGTH` | Лимит длины вывода команды. |
| `CLAUDE_CODE_TOOL_MEMORY_LIMIT` | Лимит памяти для команд через контрольные группы. Только Linux. |
| `MCP_TIMEOUT`, `MCP_TOOL_TIMEOUT` | Таймаут старта сервера и вызова инструмента. |
| `CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS` | Сколько субагентов работает одновременно. По умолчанию двадцать. |
| `CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH` | Глубина вложенности субагентов. По умолчанию три; единица отключает вложенность. |
| `CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY` | Сколько параллельных вызовов только на чтение. По умолчанию десять. |
| `TASK_MAX_OUTPUT_LENGTH` | Потолок вывода субагента в символах: по умолчанию 32000, максимум 160000. |
| `CLAUDE_CODE_ENABLE_TASKS` | Какие инструменты задач давать: по умолчанию новые, ноль возвращает старый единый инструмент. |
| `CLAUDE_CODE_ENABLE_TODO_TOOLS` | Вернуть инструменты задач на моделях, где их убрали. |
| `USE_BUILTIN_RIPGREP` | Использовать встроенный ripgrep. |
| `CLAUDE_CODE_WEBFETCH_CACHE_TTL_MS` | Сколько держать в кэше загруженные страницы. По умолчанию пятнадцать минут. |
| `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` | Выключить фоновые задачи. |
| `CLAUDE_CODE_DISABLE_CLAUDE_MDS` | Не загружать файлы `CLAUDE.md`. |
| `CLAUDE_CODE_SAFE_MODE`, `CLAUDE_CODE_RESTRICTED`, `CLAUDE_CODE_SIMPLE` | То же, что одноимённые флаги запуска. |

Три засады в этой таблице стоит проговорить.

**Таймауты MCP различаются на пять порядков.** Старт сервера — тридцать секунд. А вызов инструмента по умолчанию — около двадцати восьми часов, то есть фактически без ограничения. Плюс у серверов по HTTP и у облачных коннекторов **каждый запрос** дополнительно ограничен минутой, и это отдельный лимит.

**`CLAUDE_CODE_PROJECT_DIR_NAME` в одиночку не работает** — только вместе с `CLAUDE_CONFIG_DIR`, и только из окружения, а не из файла настроек.

**Безопасный режим отбирает больше, чем кажется.** `CLAUDE_CODE_SAFE_MODE` — это не только инструкции и навыки: не грузятся плагины, хуки, MCP-серверы, свои команды и агенты, стили вывода, воркфлоу, темы, горячие клавиши, строка состояния, источник подсказок файлов, языковые серверы и автопамять. Остаётся только корпоративная политика, включая заданные ею хуки и строку состояния. Это отладочный режим «выключить всё, что я настроил», и для поиска сломанной конфигурации он идеален.

### Рендеринг и доступность

Одной строкой, потому что переменных много, а нужны они редко. Классический рендерер возвращает `CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN`, и он **сильнее** и `CLAUDE_CODE_NO_FLICKER`, и настройки `tui`. Есть отдельные выключатели мыши и кликов, скорости прокрутки, виртуальной прокрутки, полной перерисовки, родного курсора, подсветки синтаксиса, гиперссылок и truecolor в tmux. Для доступности — `CLAUDE_AX_SCREEN_READER` и родственные ей.

### Приватность, телеметрия, обновления

| Переменная | Что делает |
|---|---|
| `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` | Один выключатель для всего необязательного исходящего трафика. |
| `DISABLE_TELEMETRY`, `CLAUDE_CODE_ENABLE_TELEMETRY` | Выключить и включить телеметрию. |
| `DO_NOT_TRACK` | Общепринятая переменная того же смысла. |
| `DISABLE_GROWTHBOOK` | Не подтягивать серверные флаги функций. |
| `DISABLE_ERROR_REPORTING` | Не слать отчёты об ошибках. |
| `DISABLE_AUTOUPDATER`, `DISABLE_UPDATES` | Выключить автообновления. |
| `DISABLE_COST_WARNINGS` | Скрыть предупреждения о стоимости. |
| `DISABLE_FEEDBACK_COMMAND` | Скрыть отправку отзывов. Старое имя `DISABLE_BUG_COMMAND` тоже принимается. |
| `DISABLE_DOCTOR_COMMAND` | Скрыть `/doctor`. |
| Семейство `OTEL_*` | Экспорт метрик, логов и трейсов. |

Три вещи, которые здесь ловят людей.

**`DISABLE_BUG_COMMAND` — не отдельный выключатель.** Это старое имя `DISABLE_FEEDBACK_COMMAND`, и одна переменная выключает и `/feedback`, и черновики отзывов, и `/bug` с `/share`, потому что они уходят по тому же каналу.

**Значение `0` не включает обратно.** У `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` любое присутствие переменной, включая `0` и `false`, отключает трафик. Чтобы вернуть, переменную надо убрать совсем.

**Выключение телеметрии отключает и функции.** Вместе с флагами функций перестают работать: авто-режим по умолчанию, `/auto-mode-setup`, удалённое управление, `/import`, `/schedule`, советчик, комментарии к артефактам, новый клиент MCP и инструмент PowerShell по умолчанию на Windows. Это осознанный размен, а не побочный дефект, но знать о нём стоит до того, как вы полчаса ищете, куда делось удалённое управление.

Что именно покрывает «весь необязательный трафик»: автообновления, телеметрию, отчёты об ошибках, отправку отзывов, заметки о выпуске, обновление списка моделей у шлюза и проверки доступности. Плюс — что неожиданно — фоновый запуск локальных команд-источников плагинов, потому что они могут потянуть за собой установку зависимостей. А вот автоустановку официального маркетплейса он не покрывает, для неё своя переменная.

## Терминальные команды и флаги

Всё, что вводится не внутри сессии, а в обычной оболочке. У каждой подкоманды ниже собрано всё сразу: её собственные подкоманды и флаги, тонкости и примеры.

Сразу главное, и это официальная формулировка, а не моё наблюдение: **`claude --help` перечисляет не все флаги.** Отсутствие флага в справке не значит, что его нет. Ниже помечено, чего в справке нет, — таких как минимум дюжина, и среди них вполне рабочие вещи вроде ограничения числа ходов.

Если ошибиться в имени подкоманды, вам предложат ближайшую и выйдут, не запуская сессию: на `claude udpate` вы получите вопрос, не имели ли вы в виду `claude update`.

### Подкоманды

#### `claude [промпт]`

Запустить интерактивную сессию. С промптом — сразу начать с него.

```bash
claude                                    # интерактивная сессия
claude "почини падающий тест в orders"    # сессия, сразу с задачей
```

#### `claude -p "<промпт>"`

Неинтерактивный запуск: напечатать ответ и выйти. Основной режим для скриптов.

```bash
claude -p "что делает этот скрипт?"       # ответить и выйти
```

#### `claude auth login|logout|status`

Вход, выход и статус авторизации. Статус печатается в JSON.

```bash
claude auth login --console               # вход через биллинг Console
claude auth logout                        # выйти
claude auth status                        # статус авторизации в JSON
```

#### `claude setup-token`

Выпустить долгоживущий токен авторизации. Нужна подписка.

```bash
claude setup-token                        # долгоживущий токен для CI
```

#### `claude agents`

Экран управления фоновыми агентами; он же их запускатель.

```bash
claude agents                             # экран фоновых агентов
```

#### `claude attach <id>`

Открыть фоновую сессию в этом терминале.

```bash
claude attach a1b2c3                      # подключиться к фоновой сессии
```

#### `claude logs <id>`

Напечатать последний вывод фоновой сессии.

```bash
claude logs a1b2c3                        # последний вывод фоновой сессии
```

#### `claude stop <id>`

Остановить фоновую сессию; разговор сохраняется. Алиас: `kill`.

```bash
claude stop a1b2c3                        # остановить
```

#### `claude respawn [id]`

Перезапустить фоновую сессию или все на текущей версии.

```bash
claude respawn --all                      # перезапустить все на новой версии
```

#### `claude rm <id>`

Удалить фоновую сессию и её рабочую копию.

```bash
claude rm a1b2c3                          # удалить сессию и её рабочую копию
```

#### `claude daemon`

Фоновая служба, которая держит все фоновые сессии. Подкоманда, о которой мало кто знает, хотя работает она у всех: это супервизор, поднимающий и держащий фоновые сессии.

| Подкоманда | Что делает |
|---|---|
| `status` | Состояние службы: версия, папка сокетов, число рабочих процессов |
| `run [путь]` | Запустить службу вручную |
| `logs` | Журнал службы |
| `stop` | Остановить; `--any` — вместе с сессиями, `--keep-workers` — оставив рабочие процессы |
| `uninstall` | Убрать службу |

Флаги `--json-path` и `--log-file` меняют расположение файла состояния и журнала; по умолчанию это `~/.claude/daemon.json` и `~/.claude/daemon.log`. В версии 2.1.251 постоянная установка службы отключена: она поднимается по требованию и завершается, когда отключается последний клиент.

Ловушка для скриптов: `claude --dangerously-skip-permissions daemon status` работает, а **любой другой глобальный флаг перед словом `daemon` запустит интерактивную сессию** вместо подкоманды. Ставьте подкоманду первой.

```bash
claude daemon status                      # состояние фоновой службы
claude daemon stop --any --keep-workers   # остановить службу, оставив рабочие процессы
```

#### `claude mcp`

Настройка MCP-серверов без запуска сессии.

| Подкоманда | Что делает |
|---|---|
| `add <имя> <команда-или-адрес> [аргументы...]` | Добавить сервер. |
| `add-json <имя> <json>` | Добавить сервер одной строкой JSON. |
| `add-from-claude-desktop` | Импортировать серверы из Claude Desktop. Только macOS и WSL. |
| `list`, `get <имя>` | Список и детали. |
| `login <имя>`, `logout <имя>` | Авторизация в сервере или сброс сохранённых учётных данных. |
| `remove <имя>` | Удалить сервер. |
| `reset-project-choices` | Сбросить решения «одобрен или отклонён» по проектным серверам. |
| `serve` | Запустить сам Claude Code как MCP-сервер. |

Самый важный флаг здесь — `--scope`, и его пропуск объясняет добрую половину вопросов «почему сервер видит только у меня» или «почему он вдруг у всех». Значения: `local` (по умолчанию), `project` — в `.mcp.json`, который коммитится, и `user` — в пользовательские настройки. Он есть у `add`, `add-json`, `add-from-claude-desktop` и `remove`.

Транспортов четыре, а не три: `stdio`, `http`, `sse` и `ws`. Короткие формы: `-t` вместо `--transport`, `-H` вместо `--header`. Для OAuth есть `--client-id`, `--client-secret` (спросит, либо возьмёт из переменной окружения) и `--callback-port`; у `login` дополнительно `--no-browser`.

Неодобренные серверы из `.mcp.json` показываются в списке как ожидающие одобрения и не подключаются.

```bash
claude mcp add fs npx -- -y @modelcontextprotocol/server-filesystem ~/work
claude mcp add --scope project github https://api.example.com/mcp -t http
claude mcp add --scope user jira https://jira.example.com/mcp -H "X-Team: core"
claude mcp add-json local-tools '{"command":"./tools","args":["--serve"]}'
claude mcp list                          # что подключено и в каком состоянии
claude mcp get github                    # детали одного сервера
claude mcp login github --no-browser     # авторизация без открытия браузера
claude mcp remove jira --scope user      # удалить именно из пользовательских
claude mcp reset-project-choices         # заново спросить про серверы проекта
claude mcp serve                         # отдать сам Claude Code как MCP-сервер
```

#### `claude plugin`

Плагины и маркетплейсы. Алиас: `plugins`.

| Подкоманда | Что делает |
|---|---|
| `install <плагин>` | Поставить из маркетплейса. Алиас `i`. |
| `uninstall <плагин>` | Удалить. Алиасы `remove`, `rm`. |
| `enable`, `disable` | Включить или выключить установленный. |
| `list` | Список установленных. Алиас `ls`. |
| `details <имя>` | Инвентарь компонентов и оценка того, сколько контекста плагин съест. |
| `update <плагин>` | Обновить; применится после перезапуска. |
| `marketplace` | Управление маркетплейсами. |
| `init <имя>` | Создать заготовку плагина. Алиас `new`. |
| `validate <путь>` | Проверить манифест, а также навыки, агентов и команды в папке. |
| `eval [цель]` | Прогнать проверочные случаи против плагина и показать оценки. |
| `tag [путь]` | Создать git-тег релиза, сверив манифест с записью в маркетплейсе. |
| `prune` | Убрать автоматически поставленные зависимости, которые больше не нужны. Алиас `autoremove`. |

Почти у всех подкоманд есть `-s, --scope` со значениями `user` (по умолчанию), `project` и `local`, а у `update` ещё и `managed`. Кроме того: у `install` — `--config ключ=значение` (можно несколько) и `-y`; у `uninstall` — `--keep-data`, `--prune`, `-y`; у `disable` — `-a` для всех; у `list` — `--json` и `--available`; у `prune` — `--dry-run` и `-y`; у `validate` — `--strict`, превращающий предупреждения в ошибки; у `init` — `--description`, `--author`, `--author-email`, `-f` и `--with` со списком компонентов: `skills`, `agents`, `hooks`, `mcp`, `lsp`, `output-style`, `channel`.

Полезно знать, что `validate` работает и на обычной папке с навыками и агентами, без всякого плагина.

```bash
claude plugin install code-review@claude-plugins-official
claude plugin install formatter@acme --config style=compact -y
claude plugin list --json                # что установлено, машиночитаемо
claude plugin details formatter          # сколько контекста он занимает
claude plugin init my-tools --with skills,hooks
claude plugin validate ./my-tools --strict
claude plugin eval ./my-tools            # прогнать проверочные случаи
claude plugin update formatter --scope project
claude plugin prune --dry-run            # что бы убралось
```

#### `claude auto-mode`

Конфигурация классификатора авто-режима.

| Подкоманда | Что делает |
|---|---|
| `config` | Что действует и откуда |
| `defaults` | Штатные правила; с `--label` — полный текст одного правила |
| `critique` | Разбор ваших правил моделью |
| `reset` | Сброс; `--yes` — без подтверждения |

```bash
claude auto-mode config                              # что действует и откуда
claude auto-mode defaults                            # штатные правила
claude auto-mode defaults --label 'Git Destructive'  # полный текст одного правила
claude auto-mode critique                            # разбор ваших правил моделью
claude auto-mode reset --yes                         # сброс без подтверждения
```

#### `claude project purge [путь]`

Удалить всё состояние по проекту: транскрипты, задачи, историю файлов, запись в конфигурации.

```bash
claude project purge ~/work/repo --dry-run   # что было бы удалено
```

#### `claude doctor`

Диагностика установки без запуска сессии и без правок.

```bash
claude doctor                             # диагностика без правок
```

#### `claude import [источник]`

Перенести конфигурацию из другого кодинг-агента.

```bash
claude import codex --dry-run             # что перенеслось бы из другого агента
```

#### `claude install [версия]`

Поставить нативную сборку: `stable`, `latest` или конкретную версию.

```bash
claude install stable                     # поставить стабильную сборку
```

#### `claude update`

Проверить обновления и поставить. Алиас: `upgrade`.

```bash
claude update                             # обновиться
```

#### `claude ultrareview [цель]`

Облачное мульти-агентное ревью с печатью находок в терминал.

```bash
claude ultrareview                        # находки печатаются прямо в терминал
```

#### `claude gateway`

Запустить корпоративный шлюз авторизации и телеметрии.

```bash
claude gateway --config gateway.yaml      # корпоративный шлюз
```

#### `claude remote-control`

**Скрытая:** держать удалённое управление как сервер. Алиас: `rc`.

```bash
claude remote-control --continue          # вернуться в последнюю сессию управления
```

#### `claude self-hosted-runner`

**Скрытая:** превратить машину или контейнер в площадку, где выполняются веб-, мобильные и desktop-сессии. Это для Team и Enterprise.

У неё есть подкоманда `setup` и отдельный оркестратор, поднимающий исполнителей по мере накопления очереди, а флагов около двадцати: адрес API, файл секрета окружения, папка хуков, порт проверки здоровья, ёмкость, тайм-ауты слива и остановки, время жизни простаивающего исполнителя, метка клиента. Всё это описано в отдельном справочнике по самостоятельно размещаемым окружениям — вопреки распространённому мнению, что подкоманда недокументирована.

```bash
claude self-hosted-runner setup           # подготовить машину как площадку
```

### Установка и обновление

Способов больше, чем `npm install`, и это стоит знать, потому что нативная сборка обновляется сама, а пакет из npm — нет.

```bash
# macOS, Linux, WSL — нативный установщик
curl -fsSL https://claude.ai/install.sh | bash
curl -fsSL https://claude.ai/install.sh | bash -s stable     # закрепить канал
curl -fsSL https://claude.ai/install.sh | bash -s 2.1.236    # закрепить версию

# Windows
irm https://claude.ai/install.ps1 | iex                      # PowerShell
winget install Anthropic.ClaudeCode                          # или пакетным менеджером

# macOS через Homebrew — два разных пакета
brew install --cask claude-code                              # стабильный, отстаёт примерно на неделю
brew install --cask claude-code@latest                       # свежий

# npm — работает, но требует Node 22+
npm install -g @anthropic-ai/claude-code
```

Есть и подписанные репозитории для apt, dnf и apk. А `claude install` и `claude update` работают, когда Claude Code уже стоит.

### Коды выхода

Раздел на три строки, но для скриптов важный.

| Код | Что означает |
|---|---|
| 0 | Успех |
| ненулевой | Запуск не удался |
| 143 | Прервано сигналом завершения |
| 137 | Установка убита до завершения |

Тонкость: неверный флаг сообщается в поток ошибок **до** начала работы, а сбой внутри работы — например отсутствие авторизации — печатается как результат в обычный вывод. То есть по одному лишь коду возврата отличить «не запустилось» от «запустилось и не смогло» не выйдет.

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

### Флаги запуска

Пометка **[нет в справке]** означает, что флаг работает, но `claude --help` в сборке 2.1.251 его не печатает.

#### Сессия и её продолжение

| Флаг | Что делает |
|---|---|
| `-c`, `--continue` | Продолжить последний разговор в текущей папке. Фоновые сессии пропускает. |
| `-r`, `--resume [значение]` | Продолжить по идентификатору или открыть интерактивный выбор. |
| `--fork-session` | При продолжении завести новый идентификатор вместо переиспользования старого. |
| `--session-id <uuid>` | Задать конкретный идентификатор сессии. |
| `-n`, `--name <имя>` | Отображаемое имя сессии. |
| `--from-pr [значение]` | Продолжить сессию, связанную с pull request. |
| `--no-session-persistence` | Не сохранять сессию на диск. Только с неинтерактивным режимом. |
| `--teleport [сессия]` | Забрать веб-сессию в терминал. |
| `--cloud [описание\|id\|адрес]` | Создать облачную сессию или подключиться к существующей. |
| `--remote` | **[устар]** Старое имя `--cloud`. Встречается в чужих скриптах. |
| `--environment <id>` | Создать облачную сессию на своём окружении. |
| `--ref <ветка>` | **[нет в справке]** С каким ref разворачивать облачное окружение. Работает вместе с `--environment`. |
| `--remote-control [имя]`, `--rc` | Запустить сессию с включённым удалённым управлением. |
| `--remote-control-session-name-prefix <префикс>` | Префикс для автоматических имён таких сессий. |
| `--bg`, `--background` | Запустить в фоне и вернуть управление; печатает идентификатор. |
| `--exec <команда>` | **[нет в справке]** Запустить не сессию, а обычную команду фоновой задачей. |
| `-w`, `--worktree [имя]` | Завести под сессию новую рабочую копию git. |
| `--tmux` | Поднять сессию tmux для рабочей копии. |
| `--teammate-mode <режим>` | **[нет в справке]** Как показывать тиммейтов: `in-process`, `auto`, `tmux`, `iterm2`. |

```bash
claude -c                                # продолжить последний разговор
claude -r                                # выбрать из списка
claude -r 8f3c1d2e --fork-session        # продолжить копией, оригинал не трогая
claude -n "рефакторинг оплаты"            # запустить с именем
claude --from-pr 1234                    # сессия по pull request
claude --bg "прогони весь тест-сьют"      # фоном, вернёт id
claude --bg --exec 'pytest -x'           # фоновая задача вообще без сессии
claude -w feature-x                      # своя рабочая копия под сессию
claude -w feature-x --tmux               # она же в tmux
claude --cloud "почини флейки в CI"       # облачная сессия
claude --environment ccpool_abc --ref main -p "прогони дымовые тесты"
```

Флаг `--exec` заслуживает отдельной строки: он превращает CLI в запускатель фоновых задач вообще без модели. Команда выполняется в псевдотерминале, её вывод читается через `claude logs`, останавливается она `claude stop`. Удобно, когда нужен единый способ следить за долгими процессами.

#### Вывод и неинтерактивный режим

| Флаг | Что делает |
|---|---|
| `-p`, `--print` | Напечатать ответ и выйти. Диалог доверия к папке пропускается. |
| `--output-format <формат>` | `text` по умолчанию, `json` или `stream-json`. |
| `--input-format <формат>` | `text` по умолчанию или `stream-json`. |
| `--json-schema <схема>` | Схема для валидации структурированного ответа. |
| `--include-partial-messages` | Отдавать куски сообщений по мере поступления. |
| `--include-hook-events` | Включить в поток события жизненного цикла хуков. |
| `--forward-subagent-text` | Пробрасывать текст и размышления субагентов. |
| `--replay-user-messages` | Возвращать пользовательские сообщения обратно в вывод. |
| `--max-turns <n>` | **[нет в справке]** Потолок числа ходов с инструментами. Главный рычаг контроля расходов в CI. |
| `--max-budget-usd <сумма>` | Потолок трат на вызовы API. |
| `--permission-prompt-tool <инструмент>` | **[нет в справке]** MCP-инструмент, который отвечает на запросы разрешений вместо человека. |
| `--ax-screen-reader` | Плоский текст без рамок и анимаций. |
| `--verbose` | Перекрыть соответствующую настройку из файла. |

```bash
claude -p "перечисли публичные эндпойнты" --output-format json | jq -r '.result'
claude -p "собери отчёт" --json-schema ./report.schema.json | jq '.structured_output'
claude -p "почини линтер" --max-turns 5              # потолок ходов
claude -p "проверь стиль" --max-budget-usd 0.50      # потолок трат
claude -p "..." --permission-prompt-tool mcp_auth_tool
cat diff.patch | claude -p "оцени риск этих изменений"
```

Два флага здесь — самые полезные и при этом отсутствующие в справке. `--max-turns` ограничивает число ходов с вызовом инструментов; при достижении потолка запуск завершается с соответствующим признаком в результате, и именно его официально советуют как основной рычаг контроля стоимости в CI. `--permission-prompt-tool` называет MCP-инструмент, который будет отвечать на запросы разрешений вместо человека, — единственный способ получить логику одобрения в неинтерактивном запуске.

#### Что нужно знать про неинтерактивный режим

**Слэш-команды в нём работают.** Свои навыки и команды подставляются прямо в текст промпта. Терминальных встроенных вроде `/login` там нет, но `/model`, `/effort`, `/fast`, `/color` и `/rename` принимают значение аргументом, а `/mcp` без аргумента печатает текстовую сводку по серверам. Настройку меняют через `/config ключ=значение`.

```bash
claude -p "/model sonnet /code-review low"
claude -p "/config thinking=false расскажи, что делает этот модуль"
```

**Формат `json` отдаёт не только текст.** В поле результата лежит ответ, рядом идентификатор сессии и оценка стоимости с разбивкой по моделям; со схемой структурированный ответ кладётся в отдельное поле. Идентификатор сессии можно сохранить и продолжить разговор потом — причём из другой папки, начиная с версии 2.1.223.

**Конфликты флагов.** `-p` вместе с `--bg` — ошибка. `--cloud` с описанием задачи вместе с `-p` — тоже; а вот `--cloud <id>` вместе с `-p` поставит сообщение в очередь этой облачной сессии и выйдет.

**Ограничения потока.** Ввод по конвейеру ограничен десятью мегабайтами: больше — понятная ошибка и ненулевой код. Если поток ввода не читается вовсе, будет предупреждение, а работа продолжится с промптом из командной строки.

**Фоновые задачи заканчиваются вместе с запуском.** Команда, запущенная в фоне во время `claude -p`, снимается примерно через пять секунд после того, как напечатан результат. Фоновые субагенты и воркфлоу — исключение, их ждут, но не дольше десяти минут непрерывного простоя.

**`--bare` — рекомендуемый режим для скриптов**, и в будущем он станет для `-p` поведением по умолчанию. Разница существенная: без него неинтерактивный запуск выполняет хуки из `.claude/settings.json` проекта и подключает серверы из его `.mcp.json` **даже в папке, которой вы никогда не доверяли**, без единого вопроса.

#### Модель, усилия, режим прав

| Флаг | Что делает |
|---|---|
| `--model <модель>` | Алиас (`fable`, `opus`, `sonnet`, `haiku`) или полное имя. |
| `--fallback-model <модель,...>` | Откат при перегрузке основной модели. Только с `-p`. |
| `--effort <уровень>` | `low`, `medium`, `high`, `xhigh`, `max`, а по документации ещё и `ultracode`. |
| `--advisor <модель>` | **[нет в справке]** Включить советчика и задать ему модель. |
| `--agent <агент>` | Агент для сессии; перекрывает настройку. |
| `--agents <json>` | Объявить своих агентов прямо в командной строке. Проверяется при запуске. |
| `--permission-mode <режим>` | `default` (он же `manual`), `acceptEdits`, `plan`, `auto`, `dontAsk`, `bypassPermissions`. |
| `--dangerously-skip-permissions` | Обходить проверки прав. |
| `--allow-dangerously-skip-permissions` | Сделать обход доступным вариантом, не включая его. |
| `--restricted` | Ограниченный режим. |
| `--safe-mode` | Выключить все кастомизации. |
| `--bare` | Минимальный режим для скриптов. |

```bash
claude --model haiku -p "перечисли изменённые файлы"
claude --effort xhigh                    # сессия с глубокими рассуждениями
claude --effort ultracode                # сразу с оркестровкой воркфлоу
claude --advisor opus                    # подключить советчика
claude --permission-mode plan            # стартовать в режиме планирования
claude --permission-mode acceptEdits     # автоматически принимать правки
claude --safe-mode                       # без хуков, навыков, плагинов и MCP
claude --bare -p "..."                   # минимальный режим для скрипта
```

Три предупреждения. **`--dangerously-skip-permissions` не работает из-под администратора:** на Linux и macOS запуск от root или через sudo отклоняется, потому что root плюс отсутствие вопросов — это доступ ко всему на машине. Внутри распознанной песочницы проверка снимается. Организация может запретить режим совсем ключом `disableBypassPermissionsMode`.

**Документация и бинарник расходятся в двух местах.** У `--permission-mode` документация перечисляет и `default`, и `manual` как его алиас, а справка бинарника — только `manual`. У `--effort` документация знает `ultracode`, справка — нет. В обоих случаях работает более широкий вариант.

**`--safe-mode` и `--bare` — разные вещи.** Первый выключает всю кастомизацию для диагностики. Второй — минимальный режим исполнения для скриптов, где ещё и авторизация идёт строго ключом. Для отладки «что-то сломалось после моих настроек» нужен первый.

#### Инструменты, папки, MCP

| Флаг | Что делает |
|---|---|
| `--tools <инструменты...>` | Набор встроенных инструментов: пустая строка выключает все, `default` включает все, либо перечислить имена. |
| `--allowedTools`, `--allowed-tools` | Разрешить инструменты списком. Обе формы работают. |
| `--disallowedTools`, `--disallowed-tools` | Запретить инструменты списком. |
| `--add-dir <папки...>` | Дополнительные рабочие папки. |
| `--mcp-config <конфиги...>` | Загрузить MCP-серверы из файлов или строк JSON. |
| `--strict-mcp-config` | Использовать только серверы из этого флага. |
| `--plugin-dir <путь>` | Загрузить плагин из папки или архива только на эту сессию. |
| `--plugin-url <адрес>` | То же, но архив по ссылке. |
| `--channels <серверы...>` | **[нет в справке]** Какие MCP-серверы слушать на предмет внешних событий. |
| `--dangerously-load-development-channels` | **[нет в справке]** Разрешить каналы вне утверждённого списка. |
| `--disable-slash-commands` | Выключить все навыки. |
| `--chrome`, `--no-chrome` | Включить или выключить интеграцию с Chrome. |
| `--ide` | Автоматически подключаться к IDE, если подходящая ровно одна. |

Оба списка инструментов принимают перечисление и через запятую, и через пробел. С `-p` серверы из `--mcp-config` ожидаются до первого хода, но не дольше таймаута старта; некорректная запись пропускается, а работа продолжается и завершается штатно — то есть **проверять в CI надо не код возврата, а список ошибок серверов в первом событии потока.**

#### Настройки, промпт, прочее

| Флаг | Что делает |
|---|---|
| `--settings <файл-или-json>` | Дополнительные настройки: путь к файлу или строка JSON. |
| `--setting-sources <источники>` | Какие слои настроек грузить: `user`, `project`, `local`. |
| `--system-prompt <промпт>` | Полностью заменить системный промпт. |
| `--system-prompt-file <путь>` | **[нет в справке]** То же, но из файла. |
| `--append-system-prompt <промпт>` | Дописать к системному промпту. |
| `--append-system-prompt-file <путь>` | **[нет в справке]** То же, но из файла. |
| `--append-subagent-system-prompt <текст>` | **[нет в справке]** Дописать к системному промпту каждого субагента. |
| `--exclude-dynamic-system-prompt-sections` | Вынести машинозависимые куски в первое пользовательское сообщение — лучше переиспользуется кэш. |
| `--autocompact <auto\|токены>` | Порог автосжатия. |
| `--betas <беты...>` | Beta-заголовки в запросах. |
| `--init` | **[нет в справке]** Выполнить хуки инициализации перед сессией. Только с `-p`. |
| `--init-only` | **[нет в справке]** Выполнить хуки старта и выйти, не начиная разговор. |
| `--maintenance` | **[нет в справке]** Выполнить хуки обслуживания. Только с `-p`. |
| `--file <id:путь ...>` | Скачать файловые ресурсы на старте. |
| `--prompt-suggestions [вкл]` | Подсказки следующего промпта. |
| `--brief` | Включить инструмент общения агента с пользователем. |
| `-d`, `--debug [фильтр]` | Отладочный режим с фильтром категорий. |
| `--debug-file <путь>` | Писать отладочный лог в файл. |
| `-v`, `--version` | Версия. |
| `-h`, `--help` | Справка. |

```bash
claude --settings '{"disableAllHooks": true}' -p "..."   # запуск без хуков репозитория
claude --setting-sources user -p "..."                   # игнорировать настройки проекта
claude --append-system-prompt-file ./team-rules.md
claude --append-subagent-system-prompt "всегда указывай пути к файлам"
claude --init-only                                       # прогреть контейнер и выйти
claude -d "api,hooks"                                    # отладка по категориям
claude -d "!1p,!file" --debug-file ./claude.log          # всё, кроме этих категорий
```

Про `--init-only` стоит сказать отдельно: это естественный способ прогреть контейнер или рабочую папку в CI — выполняются хуки установки и старта сессии, после чего процесс завершается, не начиная разговора.

И про расхождение, которое стоит запомнить, если пишете скрипты по документации: **`-v` в сборке 2.1.251 — это `--version`**, хотя документация утверждает, что это короткая форма `--verbose`. Проверьте на своей версии, прежде чем полагаться.

## Чего нет ни в какой документации

Оговорка на будущее: раз этих вещей нет в документации, никто не обещал их сохранять. Строить на них автоматизацию — осознанный риск.

**Полтора десятка команд для артефактов.** В официальном справочнике из этой группы есть только `/artifacts`, `/design`, `/design-login` и `/design-sync`. Всё остальное — `/prototype`, `/doc`, `/plan-artifact`, `/artifact-pr-review`, `/artifact-dashboard`, `/artifact-report`, `/artifact-data-table`, `/artifact-explainer`, `/artifact-components`, `/artifact-design`, `/artifact-diagramming`, `/artifact-capabilities` — не упоминается нигде. Туда же `/whiteboard`, `/whiteboard-mp` и `/workshop`.

**Семь подкоманд `/design`.** Официально это одна команда, принимающая описание дизайна. В бинарнике она понимает `sync`, `login`, `consent`, `revoke`, `import`, `export` и `status`.

**Диагностика собственного расхода.** `/skill-doctor`, показывающий неиспользуемые навыки, и `/explain-usage`, объясняющий расход человеческим языком, не документированы ни один, ни другой. Как и `/plugin-types`, генерирующий типы подключённых MCP-инструментов.

**Ещё пять команд повседневного обихода.** `/brief` — режим коротких ответов. `/daemon` — управление фоновыми службами. `/cloud-plugins` — плагины в облачных сессиях. `/session` (алиас `/remote`) — адрес удалённой сессии и QR-код к ней; в справочнике есть `/remote-control` и `/teleport`, а этой строки нет. И `/install`, ставящий нативную сборку прямо из сессии.

**Встроенные навыки, которыми пользуются все.** `/commit`, `/pr`, `/update-config`, `/claude-code-docs`, `/claude-in-chrome` не описаны ни в справочнике команд, ни в разделе про встроенные навыки. Единственное косвенное упоминание в чейнджлоге — исправление ошибки, где агент звал несуществующий навык коммита.

**Команды, выключенные в этой сборке.** `/version`, `/update`, `/loops`, `/wellbeing` со всеми алиасами и `/pause-memory` — зарегистрированы, но не работают. Ни одна из них не упомянута в чейнджлоге ни как убранная, ни как добавленная: `/version`, `/wellbeing` и `/pause-memory` не встречаются там вообще ни разу за всю историю, а упоминания `/update` — это исправления ошибок, где она ещё работает.

**Команды, появляющиеся по состоянию.** `/limit-reset`, `/low-priority`, `/pro-trial-expired`, `/design-consent`, `/design-revoke` и относящаяся к режиму Cowork `/setup-cowork`. Документация признаёт ровно одну скрытую команду — снятие дампа памяти — и отдельно упоминает, что настройка провайдеров появляется вместе с переменной окружения. Про эти шесть нет ничего.

**Внутренние входы и навыки только для модели.** `__remote-workflow` и `workflow-launch-exec`, через которые сервер передаёт сессии готовый воркфлоу. И три навыка, которые агент подтягивает сам, а набрать их нельзя: `keybindings-help`, `memory-types`, `cowork-plugin`. Механизм — поле `user-invocable: false` — описан, а сами навыки нет.

**Устройство `/code-review` изнутри.** Документация описывает уровни качественно. Сколько там независимых углов поиска, сколько кандидатов на угол и какой потолок находок на каждом уровне, а также то, что на Opus 5 средний и высокий уровни сейчас сводятся к одному проходу, — этого нет нигде. Как и трёх правил разбора аргументов, из-за которых `ultra` работает только первым словом.

**Форма `/sandbox exclude "шаблон"`.** Официальная строка про эту команду — одно предложение: переключить режим песочницы. Про вывод отдельных команд из-под изоляции и про подкоманду доустановки на Windows не сказано.

**Алиас `/name` у команды `/rename`.** Строка про саму команду в справочнике необычно подробная — с санитизацией имени и лимитом длины, — но алиаса в ней нет.

**Флаг `--file`.** Скачивание файловых ресурсов на старте в перечне флагов отсутствует.

**Восемь ключей настроек.** По ним нет ни строчки ни в документации, ни в чейнджлоге, ни в опубликованной схеме: `doneMeansMerged` — «готово значит смержено»; `breakReminder` и `quietHours` — напоминания о перерывах и тихие часы (в поиске находится статья про потребительское приложение Claude, но это другое и без ключей настроек); `precomputeCompactionEnabled`; `daemonColdStart`; `defaultView`; `autoUploadSessions`; `showMessageTimestamps`. Плюс `xaaIdp` вместе с включающей его переменной, `syncClaudeAiPlugins` — при том что его брат `syncClaudeAiSkills` документирован, — и `proxyAuthHelper`.

**Ключи, которые есть только в опубликованной схеме.** `sandbox.enabledPlatforms`, `skippedMarketplaces` и `skippedPlugins` — ноль упоминаний в документации и чейнджлоге, схема остаётся их единственным публичным следом.

**Восемь переменных окружения.** Официальная страница перечисляет триста сорок девять штук, и этих среди них нет: `CLAUDE_CODE_GOAL_CHECKIN_MINUTES`, `CLAUDE_CODE_WORKFLOW_PREFIX_STAGGER_MS`, `CLAUDE_CODE_DISABLE_AGENT_VIEW`, `CLAUDE_CODE_DISABLE_WORKFLOWS`, `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING`, `CLAUDE_CODE_DISABLE_CLAUDE_MDS`, `CLAUDE_CODE_SHELL` вместе с `CLAUDE_CODE_SHELL_PREFIX` и `USE_BUILTIN_RIPGREP`. Для части из них есть документированные соседи с другими именами и слегка другим смыслом — например для отключения размышлений или для переключения поиска файлов, — но это не они.

**Подкоманда `claude plugin eval`.** Прогон проверочных случаев против плагина: в справочнике по плагинам перечислены десять подкоманд, и этой среди них нет.

**И отсутствие того, чего нет.** Команды `/init-verifiers` не существует, `/alias` не является слэш-командой, а файла `.claudeignore` нет вовсе. Про несуществующее документация, естественно, молчит — а статьи в интернете нет.

Отдельно стоит сказать про число. В официальном справочнике сто одиннадцать строк, и там честно написано, что не каждая команда доступна каждому. Сколько их зарегистрировано всего, не публикуется; в сборке 2.1.251 получается около полутора сотен вместе с навыками. Community-шпаргалки называют то двести семьдесят два (считая заодно флаги командной строки), то около семидесяти — и обе цифры ни на чём не основаны.

## С чего начать, если всё это видишь впервые

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

**Сразу, в пользовательском файле.** Права инструментов: без них вас будут спрашивать про каждую сборку и каждый `git status`, и через час вы начнёте жать «разрешить» не читая — а это ровно та привычка, из-за которой потом что-нибудь удаляется. Строку состояния: постоянно видимые расход и заполненность контекста меняют поведение сильнее любых благих намерений. И `cleanupPeriodDays` побольше, если собираетесь когда-нибудь искать старый разговор или откатываться к контрольной точке.

**В проекте, коммитом в репозиторий.** Разрешения на команды именно этого проекта, хуки, которые держат инварианты, и `.mcp.json` с серверами, нужными всей команде.

**На потом.** Песочница, самостоятельно размещаемые окружения, корпоративные ключи. Они решают задачи, которых у вас, скорее всего, пока нет; а раздел про песочницу стоит прочитать ровно в тот день, когда вы впервые запускаете агента с обходом подтверждений.

Файл, с которого нормально начать:

```json title="~/.claude/settings.json"
{
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
  "cleanupPeriodDays": 365,
  "fileCheckpointingEnabled": true,
  "permissions": {
    "allow": [
      "Bash(git status)",
      "Bash(git diff:*)",
      "Bash(git log:*)",
      "Bash(npm run build)",
      "Bash(npm test:*)"
    ],
    "ask": ["Bash(git push:*)"],
    "deny": ["Read(./.env)", "Read(./.secrets/**)"]
  },
  "statusLine": {
    "type": "command",
    "command": "~/.claude/statusline.sh"
  }
}
```

Пять разрешений — это уже заметно меньше вопросов. Один запрет на файл с секретами — потому что запрет побеждает разрешение, и это самый дешёвый способ сделать так, чтобы содержимое `.env` никогда не уехало в контекст. Контрольные точки включены явно: без них `/rewind` не вернёт ни одного файла, а понимаешь это обычно в неподходящий момент.
