Claude Code — команды, настройки, флаги
Привет!
Это справочник. Не рассказ о том, как правильно работать с агентом — про это у меня есть отдельная статья, — а перечень: что можно набрать, что можно написать в настройках, что из этого что делает и как это выглядит на практике.
Актуальность: август 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 по репозиторию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 в промпте тоже сработает. Если это мешает — оставить команду набираемой, но запретить агенту и расписанию её запускать:
{ "skillOverrides": { "code-review": "user-invocable-only" }}Облачный режим — исключение: ultra агент не запускает никогда, ни сам, ни по расписанию.
Порядок аргументов. Три правила, из-за которых вызов срабатывает не так, как ожидалось:
ultraпонимается только первым словом./code-review ultra --fix— облачное ревью, а/code-review --fix ultra— обычное локальное, в котором словоultraпонято как цель.- Уровень — первое слово после того, как из строки убраны флаги. Поэтому
/code-review --fix highработает, и уровень будетhigh. - Флаги можно ставить где угодно: в начале, в конце, между уровнем и целью. Единственное исключение — правило 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 облачное ревью запускается неинтерактивно:
claude -p '/code-review ultra'Команда стартует ревью, печатает ссылку для отслеживания и не ждёт результата. Но если ревью должно списать кредиты, запуск остановится: подтверждение оплаты требует интерактивной сессии. Для такого случая есть отдельная подкоманда, сам факт запуска которой считается вашим согласием на списание:
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 тоже сработает, если имя больше никем не занято.
Простейший пример:
---name: fix-issuedescription: Разобрать 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}.
То, что они работают в обоих местах, — не мелочь, а рабочий приём: так навык запускает свой собственный скрипт без единого вопроса о правах.
---name: renderdescription: Отрисовать схему из исходника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:
{ "$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 — вложенные объекты.
{ "$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).
{ "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, будет заблокирован.
Правила по параметрам инструмента
Малоизвестное семейство. Запрещающие и спрашивающие правила умеют совпадать по скалярному полю входных данных инструмента:
{ "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, теперь нет.
Посмотреть и разобрать конфигурацию можно из терминала:
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.
Хуки
Хуки — тема на отдельную статью, и она у меня есть: там разобраны все события, форматы обмена и рабочие примеры. Здесь ключи настроек и то, что чаще всего ломается.
hooks — объект вида «событие → массив матчеров». У матчера есть фильтр matcher и список обработчиков.
{ "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 не готов к слиянию. |
{ "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 сам.
{ "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 её пока не читает. |
{ "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 есть важный побочный эффект: внутри полной виртуальной машины нет ни политики устройства, ни файла корпоративных настроек — доставлять их туда придётся иначе.
{ "remote": { "defaultEnvironmentId": "env-123" }, "sshConfigs": [ { "id": "prod-box", "name": "Prod", "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 | объект | [эксп] Тихие часы: один мягкий намёк за сессию внутри заданного окна местного времени. |
{ "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 остановит запуск.
{ "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, которое нигде не собрано в одном месте.
{ "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 [промпт]
Запустить интерактивную сессию. С промптом — сразу начать с него.
claude # интерактивная сессияclaude "почини падающий тест в orders" # сессия, сразу с задачейclaude -p "<промпт>"
Неинтерактивный запуск: напечатать ответ и выйти. Основной режим для скриптов.
claude -p "что делает этот скрипт?" # ответить и выйтиclaude auth login|logout|status
Вход, выход и статус авторизации. Статус печатается в JSON.
claude auth login --console # вход через биллинг Consoleclaude auth logout # выйтиclaude auth status # статус авторизации в JSONclaude setup-token
Выпустить долгоживущий токен авторизации. Нужна подписка.
claude setup-token # долгоживущий токен для CIclaude agents
Экран управления фоновыми агентами; он же их запускатель.
claude agents # экран фоновых агентовclaude attach <id>
Открыть фоновую сессию в этом терминале.
claude attach a1b2c3 # подключиться к фоновой сессииclaude logs <id>
Напечатать последний вывод фоновой сессии.
claude logs a1b2c3 # последний вывод фоновой сессииclaude stop <id>
Остановить фоновую сессию; разговор сохраняется. Алиас: kill.
claude stop a1b2c3 # остановитьclaude respawn [id]
Перезапустить фоновую сессию или все на текущей версии.
claude respawn --all # перезапустить все на новой версииclaude rm <id>
Удалить фоновую сессию и её рабочую копию.
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 запустит интерактивную сессию вместо подкоманды. Ставьте подкоманду первой.
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 показываются в списке как ожидающие одобрения и не подключаются.
claude mcp add fs npx -- -y @modelcontextprotocol/server-filesystem ~/workclaude mcp add --scope project github https://api.example.com/mcp -t httpclaude 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 работает и на обычной папке с навыками и агентами, без всякого плагина.
claude plugin install code-review@claude-plugins-officialclaude plugin install formatter@acme --config style=compact -yclaude plugin list --json # что установлено, машиночитаемоclaude plugin details formatter # сколько контекста он занимаетclaude plugin init my-tools --with skills,hooksclaude plugin validate ./my-tools --strictclaude plugin eval ./my-tools # прогнать проверочные случаиclaude plugin update formatter --scope projectclaude plugin prune --dry-run # что бы убралосьclaude auto-mode
Конфигурация классификатора авто-режима.
| Подкоманда | Что делает |
|---|---|
config | Что действует и откуда |
defaults | Штатные правила; с --label — полный текст одного правила |
critique | Разбор ваших правил моделью |
reset | Сброс; --yes — без подтверждения |
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 [путь]
Удалить всё состояние по проекту: транскрипты, задачи, историю файлов, запись в конфигурации.
claude project purge ~/work/repo --dry-run # что было бы удаленоclaude doctor
Диагностика установки без запуска сессии и без правок.
claude doctor # диагностика без правокclaude import [источник]
Перенести конфигурацию из другого кодинг-агента.
claude import codex --dry-run # что перенеслось бы из другого агентаclaude install [версия]
Поставить нативную сборку: stable, latest или конкретную версию.
claude install stable # поставить стабильную сборкуclaude update
Проверить обновления и поставить. Алиас: upgrade.
claude update # обновитьсяclaude ultrareview [цель]
Облачное мульти-агентное ревью с печатью находок в терминал.
claude ultrareview # находки печатаются прямо в терминалclaude gateway
Запустить корпоративный шлюз авторизации и телеметрии.
claude gateway --config gateway.yaml # корпоративный шлюзclaude remote-control
Скрытая: держать удалённое управление как сервер. Алиас: rc.
claude remote-control --continue # вернуться в последнюю сессию управленияclaude self-hosted-runner
Скрытая: превратить машину или контейнер в площадку, где выполняются веб-, мобильные и desktop-сессии. Это для Team и Enterprise.
У неё есть подкоманда setup и отдельный оркестратор, поднимающий исполнителей по мере накопления очереди, а флагов около двадцати: адрес API, файл секрета окружения, папка хуков, порт проверки здоровья, ёмкость, тайм-ауты слива и остановки, время жизни простаивающего исполнителя, метка клиента. Всё это описано в отдельном справочнике по самостоятельно размещаемым окружениям — вопреки распространённому мнению, что подкоманда недокументирована.
claude self-hosted-runner setup # подготовить машину как площадкуУстановка и обновление
Способов больше, чем npm install, и это стоит знать, потому что нативная сборка обновляется сама, а пакет из npm — нет.
# macOS, Linux, WSL — нативный установщикcurl -fsSL https://claude.ai/install.sh | bashcurl -fsSL https://claude.ai/install.sh | bash -s stable # закрепить каналcurl -fsSL https://claude.ai/install.sh | bash -s 2.1.236 # закрепить версию
# Windowsirm https://claude.ai/install.ps1 | iex # PowerShellwinget 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. |
claude -c # продолжить последний разговорclaude -r # выбрать из спискаclaude -r 8f3c1d2e --fork-session # продолжить копией, оригинал не трогаяclaude -n "рефакторинг оплаты" # запустить с именемclaude --from-pr 1234 # сессия по pull requestclaude --bg "прогони весь тест-сьют" # фоном, вернёт idclaude --bg --exec 'pytest -x' # фоновая задача вообще без сессииclaude -w feature-x # своя рабочая копия под сессиюclaude -w feature-x --tmux # она же в tmuxclaude --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 | Перекрыть соответствующую настройку из файла. |
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_toolcat diff.patch | claude -p "оцени риск этих изменений"Два флага здесь — самые полезные и при этом отсутствующие в справке. --max-turns ограничивает число ходов с вызовом инструментов; при достижении потолка запуск завершается с соответствующим признаком в результате, и именно его официально советуют как основной рычаг контроля стоимости в CI. --permission-prompt-tool называет MCP-инструмент, который будет отвечать на запросы разрешений вместо человека, — единственный способ получить логику одобрения в неинтерактивном запуске.
Что нужно знать про неинтерактивный режим
Слэш-команды в нём работают. Свои навыки и команды подставляются прямо в текст промпта. Терминальных встроенных вроде /login там нет, но /model, /effort, /fast, /color и /rename принимают значение аргументом, а /mcp без аргумента печатает текстовую сводку по серверам. Настройку меняют через /config ключ=значение.
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 | Минимальный режим для скриптов. |
claude --model haiku -p "перечисли изменённые файлы"claude --effort xhigh # сессия с глубокими рассуждениямиclaude --effort ultracode # сразу с оркестровкой воркфлоуclaude --advisor opus # подключить советчикаclaude --permission-mode plan # стартовать в режиме планированияclaude --permission-mode acceptEdits # автоматически принимать правкиclaude --safe-mode # без хуков, навыков, плагинов и MCPclaude --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 | Справка. |
claude --settings '{"disableAllHooks": true}' -p "..." # запуск без хуков репозиторияclaude --setting-sources user -p "..." # игнорировать настройки проектаclaude --append-system-prompt-file ./team-rules.mdclaude --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 с серверами, нужными всей команде.
На потом. Песочница, самостоятельно размещаемые окружения, корпоративные ключи. Они решают задачи, которых у вас, скорее всего, пока нет; а раздел про песочницу стоит прочитать ровно в тот день, когда вы впервые запускаете агента с обходом подтверждений.
Файл, с которого нормально начать:
{ "$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 не вернёт ни одного файла, а понимаешь это обычно в неподходящий момент.