- Исключить собственные моды пользователей, с модами вашей организации или без них: Остановить загрузку установленных пользователем модов
- Узнать, что получат ваши пользователи, если вы ничего не измените: Узнать, что происходит по умолчанию
- Оставить моды включенными с другими ограничениями: Выбрать, сколько разрешить
Эти случаи рассматриваются на других страницах:
- Вы раньше не развертывали управляемые параметры: начните с Развертывание управляемых параметров
- Вы хотите контролировать, какие плагины могут устанавливать пользователи: см. Управление плагинами для вашей организации
Остановить загрузку установленных пользователем модов
Чтобы предотвратить загрузку каждого мода, который приносят ваши пользователи, установите параметрallowManagedModsOnly на встроенной защите, политическом моде, который Claude Code загружает перед каждым модом, установленным пользователем. Параметр находится в управляемых параметрах под pluginConfigs, с ключом cc-plugin-sec-default@builtin:
managed-settings.json
- Ни один мод, который приносит пользователь, не загружается: это охватывает мод в плагине, установленном пользователем, мод, загруженный с помощью
--plugin-dir, и мод, который Claude написал во время сеанса - Моды вашей организации по-прежнему загружаются: мод, который считается модом вашей организации, не проверяется. Все остальные моды считаются модами пользователя и не загружаются. Это включает мод в плагине, который вы включаете из GitHub или другого удаленного маркетплейса, и мод, который ваша организация включает для своих членов на claude.ai. Если ни один не считается вашим, установленный мод не загружается.
- Пользователи не могут это отменить: защита читает параметр только из управляемых параметров, поэтому та же запись в файле параметров пользователя, проекта или локальных параметров или в файле, переданном с помощью
--settings, ничего не меняет - Файл или политика MDM охватывают каждого поставщика: когда вы доставляете параметр в виде файла или через MDM, он работает одинаково на Amazon Bedrock, Google Cloud’s Agent Platform и Microsoft Foundry. Для доставки из консоли администратора claude.ai см. Доступность платформы
- Другие настройки пользователей продолжают работать: их hooks в файлах параметров, строки состояния и
/goalне затронуты - Встроенные моды продолжают работать: моды, встроенные в Claude Code, такие как поддержка
AGENTS.md, имеют свой собственный переключатель
--plugin-dir и путем к каталогу, который содержит мод, например claude --plugin-dir ./first-mod. Hooks мода не запускаются, и транскрипт и журнал отладки содержат сообщение защиты, которое называет мод и allowManagedModsOnly. Если мод загружается, см. Проверить, что политика действует и правила, которые определяют, вступает ли параметр в силу.
Если вы установили CLAUDE_CODE_ENABLE_FUNCTION_HOOKS на 0 во время раннего доступа, замените его этим параметром. Claude Code v2.1.287 и более поздние версии игнорируют переменную при любом значении, поэтому 0 там оставляет моды включенными.
Узнать, что происходит по умолчанию
Без собственных параметров модов вот что получают ваши пользователи:-
Моды включены. Пользователь может установить плагин, содержащий мод из любого маркетплейса, который разрешают ваши параметры плагинов, или загрузить его из каталога с помощью
--plugin-dir. -
Встроенная защита работает первой. Claude Code загружает встроенный мод с именем
sec-default@builtinперед каждым модом, установленным пользователем. Пользователи не могут его отключить./pluginи журнал отладки указывают его какcc-plugin-sec-default. Защита загружается, когда верно одно из следующих условий:- На машине есть управляемые параметры
- Пользователь вошел в Claude Code с планом Team или Enterprise
-
Защита защищает то, что вы управляете. Мод пользователя не может изменить то, что получают или решают ваши управляемые hooks, системный запрос, ваши управляемые
CLAUDE.mdи другие управляемые инструкции, то, что любой мод читает как параметры, или инструменты и описания ваших управляемых MCP серверов. - Все остальное разрешено. Защита не добавляет других ограничений. Мод пользователя по-прежнему может читать и писать файлы, запускать процессы, делать сетевые запросы, переписывать вызовы инструментов и запросы, отказывать в вызове инструмента, одобрять вызов, который иначе потребовал бы подтверждения, и рисовать в интерфейсе, все с разрешениями этого пользователя.
-
Правила отказа и ваши управляемые hooks имеют приоритет. Где загружается защита, мод пользователя не может одобрить вызов, который правило
denyотказывает, независимо от того, какой файл параметров содержит правило. Блокировка из hookPreToolUseв управляемых параметрах также окончательна. Оба применяются к вызовам инструментов Claude. Ни один не применяется к собственным вызовам мода$.fsи$.process: с отказаннымRead(.env), мод все еще может прочитать этот файл с помощью$.fs.readили запустить программу, которая это делает. Чтобы ограничить эти вызовы, не позволяйте моду загружаться или подключите вызов в политическом моде. -
Другие проверки разрешений могут быть переопределены. Мод пользователя, который одобряет вызовы инструментов, может одобрить вызов, который правило
askпотребовало бы подтверждения, или который hookPreToolUseвне управляемых параметров заблокировал. В автоматическом режиме вызов, одобренный модом, выполняется без проверки классификатора.
mods/sec-default репозитория Claude Code.
Узнать, какие элементы управления по-прежнему применяются
Моды не заменяют элементы управления, которые у вас уже есть:- Hooks параметров продолжают работать. Hooks команд, HTTP, запросов и агентов в файлах параметров и в
hooks/hooks.jsonплагинов работают как раньше, наряду с модами. Ничего в них не устарело. - Правила отказа имеют приоритет, где загружается защита. Мод пользователя не может одобрить вызов, который правило
denyотказывает, если вы не установитеallowModsToOverrideDenyRules. - Управляемые hooks работают первыми. Hook
PreToolUseв управляемых параметрах работает перед тем, как любой мод увидит вызов инструмента, и его блокировка окончательна. Если мод затем переписывает вызов, ваши управляемые hooks работают снова на переписанном вызове, поэтому блокировка по-прежнему применяется. HooksPreToolUseиз других файлов параметров и из плагинов работают после последнего мода, поэтому мод, который возвращает свой собственный результат вместо запуска инструмента, не позволяет им работать. См. Порядок, в котором работают моды. - Политика сети охватывает
$.http.fetch. Если ваша организация отключает веб-выборку или отключен несущественный сетевой трафик для сеанса, Claude Code отказывает в сетевом запросе, который мод делает с помощью$.http.fetch. Политика не охватывает программу, которую мод запускает с помощью$.process.run. Эта программа достигает сети с собственным доступом пользователя. - Элементы управления плагинами охватывают моды. Мод — это плагин, поэтому параметры, которые ограничивают то, что пользователи могут установить, такие как
strictKnownMarketplaces, определяют, может ли он быть установлен вообще. - Моды не могут изменить запрос разрешения. Мод может переделать большую часть интерфейса Claude Code, но не запрос разрешения, поэтому он не может изменить то, что показывает запрос. Мод все еще может одобрить или отказать в вызове инструмента перед появлением запроса, как описано в Узнать, что происходит по умолчанию.
- Запросы доверия идут первыми. В интерактивном сеансе в каталоге, который пользователь еще не доверил, ни один мод не загружается, пока они не ответят на запрос доверия.
--safe-modeотключает установленные моды, включая ваши. Запустите сеанс сclaude --safe-mode, чтобы проверить, вызвал ли мод проблему.
Решить, оставить ли моды включенными
Мод может делать больше, чем другие части плагина, потому что он работает внутри Claude Code. Он видит каждый запрос и вызов инструмента, может их изменять и может разрешить или отказать в вызове инструмента перед появлением запроса разрешения. То, что пользователь может загрузить как мод, зависит от элементов управления плагинами, которые у вас уже есть:
Управление плагинами для вашей организации перечисляет каждый способ загрузки плагина и параметр, который управляет каждым.
Чтобы проверить моды в маркетплейсе перед тем, как ваши пользователи их установят, см. Просмотреть возможности мода. Чтобы исключить моды пользователей, пока вы это делаете, см. Остановить загрузку установленных пользователем модов.
Просмотреть возможности мода
Вы можете увидеть, что может делать мод, не запуская его. В вашей оболочке запуститеclaude plugin validate в каталоге плагина:
hooks: перечисляет события, которые получает мод. Строка calls: перечисляет методы API модов, которые вызывает его код. API модов, написанный $ в коде мода, — это то, как мод достигает файлов, процессов и сети. Claude Code отказывается загружать мод, который использует API модов способом, который эта команда не может прочитать.
Посмотрите на строку calls: для этих:
В строке
hooks:, tool.call и prompt.submit означают, что мод видит каждый вызов инструмента и каждый запрос и может их изменять. session.append означает, что мод может переписать каждую строку разговора перед ее сохранением. ui.render{component=AskUserQuestion} означает, что мод может переделать диалог, который Claude использует для вопроса пользователю. tool.check означает, что мод может одобрить или отказать в вызове инструмента перед появлением запроса разрешения. Узнать, что происходит по умолчанию перечисляет, какие из ваших правил и hooks имеют приоритет над его ответом.
Выбрать, сколько разрешить
Политики модов варьируются от отсутствия установленных модов вообще до любого мода, который выбирает пользователь, с вашим собственным модом, проверяющим остальные, и каждая из них — это несколько управляемых параметров. Найдите политику, которую вы хотите, в первом столбце и установите то, что называет второй столбец. Развертывание управляемых параметров охватывает, где находятся управляемые параметры.
Что делает каждый параметр:
allowManagedModsOnly: параметр встроенной защиты. Моды пользователей не загружаются, и их hooks параметров, строки состояния и/goalпродолжают работать. Остановить загрузку установленных пользователем модов перечисляет, что он охватывает.allowManagedHooksOnly: более широкий параметр. Загружаются только моды вашей организации и моды, встроенные в Claude Code. Мод, который пользователь установил сам, не загружается. Параметр также блокирует hooks в собственных файлах параметров пользователей. Прочитайте Что работает подallowManagedHooksOnlyперед тем, как установить его.disableAllHooks: самый широкий параметр. В управляемых параметрах он останавливает моды в каждом установленном плагине, включая ваши, и отключает каждый hook в файлах параметров, поэтому hookPreToolUseв ваших управляемых параметрах больше ничего не блокирует. Пользовательские строки состояния и/goalтакже перестают работать. ПрочитайтеdisableAllHooksперед тем, как установить его.disableSideloadFlags: отклоняет--plugin-dirи--plugin-urlпри запуске, поэтому никто не загружает мод из каталога и не позволяет модам, которые Claude пишет во время сеанса, загружаться. Параметр также отклоняет--agentsи--mcp-config. ПрочитайтеdisableSideloadFlagsперед тем, как установить его.
AGENTS.md, не затронуты этими параметрами. Каждый имеет свой собственный переключатель.
Пользователь, чей мод не загрузился, найдет причину в своем журнале отладки. Сообщения об отказе перечисляет строки для allowManagedHooksOnly и disableAllHooks, и Сообщения от встроенной защиты содержит строку для allowManagedModsOnly.
Установить параметры на встроенной защите
Встроенная защита принимает два параметра. Установите их в управляемых параметрах подpluginConfigs, с ключом cc-plugin-sec-default@builtin, как это делает пример в Остановить загрузку установленных пользователем модов.
Таблица показывает, что получают ваши пользователи с каждым параметром не установленным и установленным на true:
Эти правила определяют, вступает ли параметр в силу:
- Id имеет одно написание здесь: Claude Code читает параметры только под
cc-plugin-sec-default@builtin.prependPluginsтакже принимаетsec-default@builtin, иpluginConfigs— нет. - Считаются только управляемые параметры: та же запись в файле параметров пользователя, проекта или локальных параметров или в файле, переданном с помощью
--settings, ни устанавливает параметр, ни ослабляет его - Защита должна загружаться: если вы установите
prependPlugins, назовите защиту в списке. Где защита не загружается, ни один параметр не применяется. - Защита отказывает закрыто: если защита не может прочитать управляемые параметры, она отказывает каждому моду пользователя при загрузке. Если она не может проверить правила отказа для вызова, который одобрил мод пользователя, она отказывает вызову.
Развертывание собственных модов вашей организации
Вы можете развертывать собственные моды для каждого пользователя, выбирать, где они выполняются относительно модов пользователей, и использовать один из них для обеспечения политики.Установка модов вашей организации и установка порядка
Моды вашей организации загружаются там, где не загружаются моды пользователей, и могут выполняться перед ними, поэтому Claude Code должен иметь возможность определить, что мод поступил от вас. Он рассматривает мод как принадлежащий вашей организации только в том случае, если все следующие условия верны:- Управляемый
enabledPluginsустанавливает плагин мода вtrue - Управляемые параметры называют marketplace плагина как каталог на машине пользователя по абсолютному пути. Запись
extraKnownMarketplacesделает это и также регистрирует marketplace для пользователя. - Marketplace указывает плагин по относительному пути, поэтому Claude Code загружает его на месте из этого каталога
/opt/acme/claude-plugins/.claude-plugin/marketplace.json
enabledPlugins его включает. Это охватывает каждый плагин из источника GitHub, git, URL или npm. Его мод выполняется среди модов пользователей, prependPlugins и appendPlugins его пропускают, и он не загружается под allowManagedModsOnly или allowManagedHooksOnly. В журнале отладки пользователя есть строка, которая начинается с идентификатора плагина и is enabled by managed settings, but.
Claude Code вызывает событие каждый раз, когда он собирается действовать, например запустить инструмент, и передает его каждому моду по очереди. Мод, который считается вашим, выполняется перед модами пользователей даже если вы его нигде не указываете. Чтобы установить его место, укажите его идентификатор в одном из двух параметров. Идентификатор — это имя плагина, @ и имя marketplace, например acme-guard@acme-tools.
prependPlugins: ваш мод видит каждое событие перед любым модом пользователя и каждый результат после. Он может изменить событие, отказать в нем или пропустить моды пользователей.appendPlugins: ваш мод выполняется после каждого мода пользователя, поэтому он видит только события, которые эти моды передают, в форме, в которой они их передают
acme-tools в /opt/acme/claude-plugins, включает acme-guard из него и запускает этот мод первым, со встроенной защитой после него:
managed-settings.json
extraKnownMarketplaces: называет каталог, который содержит marketplaceacme-tools.path— это абсолютный путь каталога, который содержит.claude-plugin/marketplace.json.enabledPlugins: включаетacme-guardдля каждого пользователя, который получает эти управляемые параметрыprependPlugins: ставитacme-guardпервым и встроенную защиту второй, обе впереди любого мода, который устанавливает пользователь. Claude Code следует порядку, который вы указываете.
claude --debug и найдите в журнале отладки идентификатор мода:
hooks module acme-guard@acme-tools loaded, сtier prepend: мод считается принадлежащим вашей организации и выполняется первым- Та же строка с
tier user: Claude Code рассматривает его как мод пользователя. Вторая строка,prependPlugins names acme-guard@acme-tools, which is not an enabled managed plugin with a hooks module; skipped, говорит, что список его пропустил.
- Список заменяет значение по умолчанию: когда вы устанавливаете
prependPluginsв управляемых параметрах, назовитеsec-default@builtinв нем, чтобы сохранить встроенную защиту. Защита встроена и не требует записиenabledPlugins. - Ваши собственные идентификаторы должны считаться вашими: в управляемых параметрах Claude Code пропускает идентификатор, чей плагин не соответствует трем условиям для мода организации
- Репозитории не могут их устанавливать: Claude Code читает оба параметра из управляемых параметров и никогда из файла параметров репозитория. Пользователь может установить их в
~/.claude/settings.json, чтобы упорядочить только свои моды на машине без управляемых параметров, и только если они не вошли в систему с планом Team или Enterprise. В любом другом месте Claude Code игнорирует оба ключа в параметрах пользователя. Список там ни не добавляет, ни не удаляет встроенную защиту.
Обеспечение политики с помощью собственного мода
Чтобы не допустить загрузку любого мода пользователя, вам не нужен собственный мод. УстановитеallowManagedModsOnly. Напишите мод политики, когда вы хотите допустить некоторые моды пользователей и отказать в других, или чтобы записать, что делают моды.
Каждый раз, когда другой мод собирается загрузиться, ваш мод получает список, который печатает claude plugin validate, в событии с именем plugin.register. Мод в prependPlugins может прочитать этот список и отказать в загрузке мода. Он также может перехватить любой вызов API модов по имени, чтобы записать или отказать в этом вызове для каждого другого мода. Имя — это метод без $., поэтому перехват на fs.write видит каждый вызов $.fs.write.
Этот мод политики отказывает любому моду пользователя, чей собственный код вызывает $.process.run или $.process.spawn. Он также ведет журнал аудита, записывая каждый вызов инструмента и каждый файл, который мод записывает, в журнал отладки. Поскольку он выполняется первым, журнал записывает то, что было запрошено, перед тем как любой мод пользователя его изменит. Сохраните его как acme-guard/hooks/register.js:
acme-guard/hooks/register.js
plugin.register: решает, загружается ли другой мод. Он отказывает моду пользователя, который вызывает заблокированный метод, и передает каждый другой мод дальше.tool.call: записывает строку, такую какaudit tool.call Bash, в журнал отладки для каждого вызова инструмента и ничего не изменяетfs.write: записывает строку, такую какaudit fs.write by reader "/tmp/notes.md", для каждого вызова$.fs.write, который делает другой мод, и ничего не изменяет. Имя мода идет первым, а путь заключен в кавычки, поэтому путь, который выбирает мод, не может выдать себя за другое поле строки.
plugin.register читает два поля события:
e.tier: где будет выполняться мод, один изprepend,user,appendилиbuiltin. Каждый мод, который устанавливает человек, — этоuser.e.uses.calls: методы API модов, которые вызывает мод, каждый написанный какnamespace.method, напримерprocess.run, без$., который печатаетclaude plugin validate
$.process.run, мод не загружается, и в его журнале отладки есть строка, которая заканчивается на refused by acme-guard: и ваша причина. Отказ также достигает стенограммы в сеансе, который горячо перезагружает каталог плагина. Чтобы заблокировать вызов без отказа всему моду, верните { deny: 'your reason' } из перехвата на имя этого вызова.
Чтобы отправить строки аудита куда-то, кроме журнала отладки, вызовите $.http.fetch из тех же перехватов.
Сеанс может выполняться без вашего мода. Если рабочий поток, который запускает установленные моды, падает три раза, Claude Code выгружает каждый мод, который не встроен, включая ваш, пока пользователь не запустит /reload-plugins или не начнет новый сеанс. И пользователь, который запускает Claude Code с --safe-mode, выполняется без установленных модов, включая ваш.
Создание мода охватывает файлы, которые нужны моду. Тестирование мода, который судит другие моды содержит файл теста для этого мода политики.
Отказ в загрузке модов, когда ваша проверка не удается
Если ваш перехватplugin.register выбросит исключение или превысит лимит времени, Claude Code пропускает перехват, поэтому проверка не удается открыто и мод, который он проверял, загружается. Чтобы не удалось закрыто и отказать в загрузке модов пользователей, переместите проверку в именованную функцию и добавьте обработчик .catch, который возвращает отказ. Эта версия файла показывает только перехват plugin.register, поэтому сохраните два перехвата аудита из первой версии в register:
acme-guard/hooks/register.js
refused by acme-guard: Acme policy check failed, so this mod was not loaded. Обработчик передает каждый мод вне уровня user к next(e), поэтому неудачная проверка не останавливает моды, которые указывает ваша организация. Обработка перехвата, который не удается охватывает .catch для других событий.
Следующие шаги
- Безопасность плагинов: что может делать любой плагин на машине пользователя и как просмотреть один перед его установкой
- Обзор модов: что такое мод и как он сравнивается с hooks, skills и MCP серверами
- Порядок, в котором работают моды: как
prependPluginsиappendPluginsподходят к модам пользователей - Параметры и переменные окружения: каждый параметр, названный на этой странице, в одной таблице