Claude Code mods: что это, как работают, как установить и создать

Моды в Claude Code — это плагины, которые меняют поведение и внешний вид инструмента изнутри: они состоят из обработчиков событий на JavaScript или TypeScript, которые Claude Code вызывает при каждом значимом действии — вызове инструмента, отправке промпта или отрисовке элемента интерфейса. Официальное описание механизма опубликовано в Mods overview — там же полная справка по API и событиям. Компания Anthropic, разработчик чат-бота Claude, представила моды как ответ на запрос разработчиков получить больше контроля над поведением Claude Code, не ожидая обновлений от команды.

В отличие от скиллов, settings-хуков и MCP-серверов, которые работают снаружи процесса, мод выполняется внутри него. Обработчик (hook) может наблюдать за событием и пропускать его дальше, переписать содержимое события или ответить вместо Claude Code, прервав цепочку. Это открывает возможности, которые внешним механизмам недоступны: рисовать собственные панели, перехватывать вызовы инструментов до их выполнения, делить данные между несколькими хуками через переменные модуля.

Схема: мод Claude Code работает внутри процесса, а хуки настроек, скиллы и MCP-серверы — снаружи
Где работает мод, а где хуки настроек, скиллы и MCP-серверы. Источник: code.claude.com

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

Что такое mod в Claude Code

Мод — это плагин, который меняет поведение и вид Claude Code и собран из обработчиков событий на JavaScript или TypeScript; каждый обработчик (hook) Claude Code вызывает, когда происходит определённое событие, и хук может наблюдать за ним, переписать его или ответить вместо Claude Code. Anthropic анонсировала моды Claude Code как ответ на запрос разработчиков получить больше контроля над поведением инструмента без ожидания обновлений.

Мод, плагин и hook — как связаны термины

Плагин — общий контейнер для расширений Claude Code: он может включать скиллы, команды, агенты и MCP-серверы. Плагин становится модом, когда в его hooks.json есть ключ modules, указывающий на файл с кодом. Именно наличие этого ключа отличает мод от других видов плагинов.

Код, на который указывает hooks.json, называется hooks module — в примере это register.js. Он экспортирует функцию register(on), которую Claude Code вызывает один раз при загрузке. Внутри этой функции вызовами on('событие', обработчик) мод сообщает, на какие события подписаться. В документации слово «hook» в контексте модов означает такой обработчик-функцию; хук, заданный командой в файле настроек, там называется «settings hook» — это разные вещи.

Когда Claude Code вызывает инструмент, он испускает событие tool.call; когда рисует спиннер — событие ui.render с component: 'Spinner'. Если мод подписан на эти события, Claude Code вызывает соответствующие обработчики перед тем, как совершить действие само. Несколько модов, подписанных на одно событие, образуют цепочку: первый загруженный получает событие первым и результат последним.

Пример: счётчик вызовов инструментов у спиннера

Канонический пример из документации — мод с двумя хуками и общей переменной calls = 0 в файле. Хук tool.call срабатывает каждый раз, когда Claude собирается использовать инструмент: он прибавляет единицу к calls, вызывает $.ui.invalidate('ui.render'), чтобы попросить Claude Code перерисовать интерфейс, и возвращает next(e) — пропускает событие дальше без изменений.

Хук ui.render срабатывает при каждой отрисовке спиннера (фильтр { component: 'Spinner' }). Он возвращает next({ ...e, props: { ...e.props, suffix: ' · tool calls: ' + calls + '…' } }) — передаёт изменённую копию события дальше, и Claude Code рисует оригинальный спиннер с добавленным суффиксом. Пока Claude перечисляет файлы и читает их, строка над промптом меняется с Thinking · tool calls: 1… до 3…. Этот пример показывает ключевую особенность модов: два хука одного файла пользуются общей переменной calls, которую ни один внешний механизм передать не мог бы.

Что мод умеет — и чего не могут хуки, скиллы и MCP

Мод работает внутри процесса Claude Code, поэтому умеет то, что недоступно внешним settings-хукам, скиллам и MCP: рисовать свой интерфейс, перерисовывать интерфейс Claude Code, вклиниваться в вызов инструмента или запрос и запускать код по команде. Settings-хуки, скиллы и MCP-серверы запускаются снаружи — они могут дать Claude текст или инструменты, но не могут нарисовать кнопку или придержать вызов до ответа пользователя.

Пять вещей, которые даёт мод

Первое — рисовать собственный интерфейс: панель сбоку от транскрипта или полосу над промптом с вкладками, кнопками и полями ввода. Второе — перерисовывать интерфейс самого Claude Code: заменять или менять стиль строки вызова инструмента, спиннера или диалогового окна с вопросом. События ui.render позволяют поменять практически любой компонент, кроме самого запроса разрешения — его мод изменить не может.

Третье — вклиниваться в вызов инструмента или запрос: придержать вызов и задать пользователю вопрос, ответить без выполнения инструмента, переслать запрос другой модели, например флагманской модели Claude через изменённое поле model в событии turn.step. Четвёртое — запускать собственный код по /command мгновенно, без хода Claude, даже пока Claude уже работает. Пятое — делить данные между хуками: переменные на уровне файла модуля доступны всем хукам мода, поэтому один хук считает вызовы инструментов, а другой показывает счётчик рядом со спиннером.

Mod, settings hook, skill, MCP: сравнение

МеханизмЧто представляетЯзык / средаРисует интерфейсКогда выбирать
МодФункции в плагине (JS/TS)Внутри Claude CodeДаНужен интерфейс, перехват события или общие данные между хуками
Settings hookShell-команда или HTTP-запрос в settings.jsonВнешний процессНетПростые реакции на события: логирование, блокировка команды
SkillMarkdown-файл с инструкциямиТекст для моделиНетДобавить знания или паттерн поведения в Claude
MCP serverВнешний процесс с инструментамиЛюбой языкНетИнтегрировать внешние API или источники данных

Один плагин может содержать и мод, и скилл, и MCP-сервер одновременно. Если settings hook или скилл уже решают задачу, мод писать не нужно: он сложнее в отладке и несёт больший риск из-за доступа к процессу. Выбирать мод стоит тогда, когда нужен интерфейс, перехват события с изменением или обмен данными между несколькими обработчиками.

Из каких файлов состоит мод

Минимальный мод состоит из трёх файлов — plugin.json, hooks.json и register.js, где plugin.json это манифест плагина, hooks.json ключом modules указывает на код, а register.js и есть сам код мода (hooks module). Никакого бандлера или сборочного шага не нужно — .js и .ts-файлы Claude Code загружает напрямую.

plugin.json, hooks.json, register.js

Дерево каталогов минимального мода выглядит так:

  • first-mod/.claude-plugin/plugin.json — манифест с полями name, version, description, author
  • first-mod/hooks/hooks.json — конфигурация с ключом modules: ['./register.js']; именно этот ключ превращает плагин в мод
  • first-mod/hooks/register.js — hooks module: экспортирует функцию register(on), которую Claude Code вызывает один раз при загрузке

Внутри register(on) каждый вызов on('событие', обработчик) подписывает функцию на конкретное событие. Вторым аргументом можно передать матчер-фильтр — объект, массив или регулярное выражение — чтобы хук срабатывал только при определённых значениях свойств события. Например, on('ui.render', { component: 'Spinner' }, handler) вызывает handler только при отрисовке спиннера, не каждого компонента.

Структура минимального мода Claude Code: plugin.json, hooks.json и register.js с хуками tool.call и ui.render
Три файла минимального мода и код register.js из документации. Источник: code.claude.com

Три аргумента хука: $, e, next

Каждому обработчику Claude Code передаёт три аргумента. Первый — Mods API под именем $: пространство имён с методами $.ui, $.command, $.process, $.fs, $.http, $.env, $.settings, $.model. Через эти методы мод взаимодействует с Claude Code и системой.

Второй аргумент — событие e: объект заморожен (Object.freeze), присваивание полю бросает ошибку. Чтобы изменить событие, нужно создать копию: { ...e, text: e.text.trim() }. Третий аргумент — next: функция, вызывающая следующий обработчик в цепочке. next(e) передаёт событие дальше и возвращает результат — это паттерн middleware. Если хук хочет ответить сам и не пускать событие дальше, он возвращает результат без вызова next.

События и как хук их обрабатывает

Событие хук обрабатывает одним из трёх способов: наблюдает (делает работу и возвращает next(e)), переписывает (вызывает next с изменённой копией e) или отвечает сам (возвращает результат без вызова next, прерывая цепочку). Хук tool.call может отказать в вызове, изменить аргументы или пропустить его в зависимости от того, что вернуть.

Observe, rewrite, answer

Режим observe — самый безопасный: хук записывает данные, вызывает next(e) и возвращает его результат. Событие продолжает путь по цепочке и в итоге доходит до Claude Code без изменений. Именно так работает хук tool.call в примере со счётчиком: он только увеличивает переменную и пропускает вызов дальше.

Цепочка хуков мода в Claude Code и три режима обработки события: наблюдать, переписать, ответить
Как событие проходит по цепочке хуков и что хук может с ним сделать. Источник: code.claude.com

Режим rewrite: так как событие e заморожено, хук передаёт next новый объект — next({ ...e, text: e.text.trim() }). Остальные моды в цепочке и сам Claude Code получат уже изменённую версию. Порядок важен: первый загруженный мод видит оригинал события, последний получает уже переработанный результат. Режим answer — хук возвращает результат без вызова next, например { deny: 'Опасная операция заблокирована' } для отказа в инструменте. Никто из последующих обработчиков событие не получит.

Главные события: tool.call, prompt.submit, ui.render, turn.*

СобытиеКогда срабатываетЧто можно сделать
tool.callПеред каждым вызовом инструмента (включая субагентов и MCP)Изменить аргументы (e.command для Bash), заблокировать { deny }, ответить своим результатом
tool.checkДо показа запроса разрешенияОдобрить или отклонить вызов раньше пользователя
prompt.submitПеред ходом ClaudeПереписать e.text, добавить context или вернуть { drop }
ui.renderПри отрисовке компонента интерфейсаИзменить props компонента, фильтровать по { component: 'Spinner' }
turn.start / turn.step / turn.completeНа шагах хода ClaudeСледить за ходом; turn.step принимает next({...e, model}) для другой модели

Фильтр-матчер вторым аргументом on позволяет сузить срабатывание: строка, массив строк или регулярное выражение сравниваются с нужным полем события. Например, on('tool.call', { tool: 'Bash' }, handler) вызывает хук только при вызовах Bash.

Пример: мод останавливает опасную команду

Образец blast-radius из репозитория Anthropic демонстрирует паттерн guard: хук подписан на tool.call с фильтром { tool: 'Bash' }. Если e.command совпадает с паттерном rm -rf или git push --force, хук вызывает $.ui.ask — этот метод рисует диалог с кнопками «Выполнить» и «Отменить» и приостанавливает обработку события.

Пока пользователь не ответил, инструмент не запускается. Если пользователь нажимает «Отменить», хук возвращает { deny: 'Cancelled by user' } без вызова next — это answer-режим, команда не выполнится и запроса разрешения от Claude Code не последует. Если «Выполнить» — next(e), команда идёт дальше как обычно. Тот же паттерн подходит для редактирования production-конфигов, принудительных git-операций и любых команд с необратимыми последствиями.

Новости
Все новости

Как получить мод: установить, попросить Claude, написать самому

Мод получают тремя путями: установить готовый как плагин из маркетплейса командой /plugin install name@marketplace, попросить Claude написать его в сессии или написать самому по трёхфайловому шаблону. В каждом случае мод в итоге оказывается плагином, который Claude Code загружает при старте сессии.

Установить готовый мод

Мод устанавливается как плагин из маркетплейса: в интерактивной сессии командой /plugin install token-chart@your-org, в шелле — claude plugin install token-chart@your-org. Готовые плагины с модами ищут в каталоге Claude (claude.ai/directory) или через /plugin прямо из сессии.

Если плагин устанавливается из шелла, пока сессия открыта, нужно выполнить /reload-plugins — иначе мод загрузится только при следующем старте Claude Code. Маркетплейс можно добавить свой: например, локальный клон репозитория claude-code-playground со встроенными образцами Anthropic добавляется как маркетплейс claude-code-playground-mods, и образцы устанавливаются оттуда как обычные плагины.

Попросить Claude написать мод

В интерактивной сессии достаточно описать, что нужно: «сделай мод, показывающий текущую git-ветку над промптом». Claude Code использует встроенный скилл plugin-authoring (загружается автоматически или по команде /plugin-authoring), пишет TypeScript-файлы мода, сохраняет их в ~/.claude/dev-mods/<id сессии>/ и предлагает включить hot reload на эту сессию — изменения будут подхватываться без перезапуска.

Мод, написанный в сессии, живёт только в ней. Чтобы сохранить его, нужно скопировать каталог и в дальнейшем загружать через --plugin-dir, или оформить как плагин и установить. Этот путь — самый быстрый для прототипа: не нужно знать API наизусть, Claude сам заполнит hooks.json и plugin.json. Набросать идею мода и обсудить логику хука можно и вне терминала: черновик на TypeScript напишет любая нейросеть онлайн.

Написать самому и попробовать образцы

Быстро попробовать свой мод можно без установки: claude --plugin-dir ./first-mod загружает каталог на одну сессию. Для постоянной установки мод оформляется как плагин и добавляется в маркетплейс.

Шаги для запуска образца из репозитория Anthropic:

  1. Клонировать https://github.com/anthropics/claude-code-playground.
  2. Перейти в каталог нужного мода, например claude-code/mods/blast-radius.
  3. Прочитать README.md — там описано, что делает мод и какие события перехватывает.
  4. Запустить claude plugin validate ./blast-radius и проверить строки hooks: и calls:.
  5. Если вывод устраивает, запустить claude --plugin-dir ./blast-radius и проверить, что мод загрузился командой /plugin.
  6. Чтобы установить постоянно — добавить каталог claude-code/mods как маркетплейс и выполнить /plugin install blast-radius@claude-code-playground-mods.

Образцы Anthropic: token-weather — рисует прогноз заполненности контекстного окна над промптом; blast-radius — придерживает опасную shell-команду; replay-theater — добавляет команду /replay, пошагово воспроизводящую правки файлов последнего хода.

Версия, включение и выключение модов

Моды работают начиная с Claude Code v2.1.287 и включены по умолчанию, а выключают их по-разному в зависимости от охвата: один мод — в /plugin, все на сессию — флагом --safe-mode, все навсегда — настройкой disableAllHooks. Проверить текущую версию: claude --version; если она старше, нужно обновить Claude Code.

Требование к версии

Моды требуют достаточно новой версии и включены по умолчанию. Переменная окружения CLAUDE_CODE_ENABLE_FUNCTION_HOOKS из раннего доступа потеряла смысл: достаточно новые версии Claude Code её игнорируют, поэтому установка в 0 моды не отключит — переменную нужно убрать совсем.

Если мод загружен, но ничего не делает, стоит сначала проверить версию, а затем выполнить /plugin в сессии: строка под вкладками покажет что-то вроде 1 mod active · first-mod. Если мод там не значится, причина не в версии, а в синтаксисе hooks.json или в отсутствии ключа modules. Подробнее о поиске проблем — в разделе про безопасность, где описана команда claude plugin validate.

Как выключить: один мод, сессия, навсегда

Варианты выключения — от точечного до полного:

  • Один мод — отключить или удалить его плагин во вкладке Installed в /plugin.
  • Все установленные моды на одну сессию — запустить Claude Code с флагом --safe-mode; он также отключает прочие пользовательские настройки.
  • Все моды во всех сессиях — установить "disableAllHooks": true в ~/.claude/settings.json; это остановит и settings-хуки, и кастомный status line, но моды, которыми управляет организация, продолжат работать.

Важно: disableAllHooks и организационная опция allowManagedModsOnly останавливают только хуки мода, не весь плагин. Скиллы, команды, агенты и MCP-серверы того же плагина продолжат загружаться. Узнать текущий тарифы подписок Pro и Max можно на сайте Anthropic — доступность управляемых настроек зависит от плана.

Безопасность модов: что мод может и как ему доверять

Мод выполняется с правами пользователя и не находится в песочнице, поэтому перед установкой проверяют, что он делает, командой claude plugin validate, которая выводит обрабатываемые события и вызовы API без запуска кода. Устанавливать моды стоит только из источников, которым доверяете так же, как доверяете любому коду, запускаемому на своём компьютере.

К чему мод имеет доступ

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

  • Читать и писать файлы в любом месте, до которого дотягивается учётная запись
  • Запускать произвольные программы и делать сетевые запросы
  • Читать переменные окружения, файлы настроек и API-ключи из них
  • Видеть каждый промпт и каждый вызов инструмента в сессии
  • Переписывать промпт или аргументы вызова, отправлять промпт от имени пользователя, отправлять сообщение в другую сессию
  • Одобрять вызов инструмента до того, как Claude Code спросит пользователя
  • Вызывать модель, расходуя лимиты плана или API-ключа

Включение sandbox-режима не защищает: песочница изолирует только Bash-команды, которые выполняет Claude, а процесс самого мода работает вне неё. Единственное, что мод гарантированно не может — изменить интерфейс запроса разрешения, тот диалог, в котором Claude Code спрашивает подтверждения у пользователя.

Проверить мод до установки: claude plugin validate

Получите файлы мода (например, клонируйте репозиторий) и выполните:

claude plugin validate ./some-mod

Вывод содержит строку hooks: — список событий, на которые подписан мод, и строку calls: — методы Mods API, которые он вызывает. Это факты о статическом коде: $.fs.read и $.fs.write — работает с файлами, $.process.run — запускает программы, $.http.fetch — делает сетевые запросы, $.env.get и $.settings.read — читает секреты, $.model.complete — вызывает модель за ваш счёт.

Если в hooks: стоят tool.call и prompt.submit одновременно, мод видит все вызовы инструментов и все промпты. Если в calls: есть $.http.fetch рядом с $.env.get или $.settings.read — мод может отправить ваши секреты наружу. Команда не запускает код мода, поэтому проверка безопасна даже для непроверенных источников.

Моды для команд, встроенные моды и где они работают

В организации моды контролируют через управляемые настройки: первым загружается встроенный мод sec-default, защищающий управляемые настройки от пользовательских модов, а опция allowManagedModsOnly вовсе запрещает загрузку чужих модов. Пользователь не может отключить ни sec-default, ни ограничение allowManagedModsOnly — они управляются только администратором.

На тарифах Team и Enterprise и на любой машине с управляемыми настройками sec-default (в списке плагинов он значится как cc-plugin-sec-default@builtin) загружается первым, раньше любых пользовательских модов. Он не позволяет пользовательскому моду переопределять deny-правила разрешений, изменять управляемый системный промпт, CLAUDE.md и настройки организации, а также подменять конфигурацию MCP. Исходный код sec-default открыт в репозитории Claude Code (каталог mods) — администратор может изучить ограничения до развёртывания.

Когда несколько модов подписаны на одно событие, они образуют цепочку по порядку загрузки. Порядок: сначала prependPlugins (сюда обычно ставят sec-default и аудитный мод организации), затем пользовательские моды, затем appendPlugins, затем встроенные. Первый в цепочке получает оригинальное событие и последним видит итоговый результат — поэтому аудитный мод, загруженный первым, гарантированно видит всё, что делают последующие моды.

Порядок модов Claude Code в цепочке: sec-default и prependPlugins, моды пользователя, appendPlugins, встроенные моды
В каком порядке моды организации, пользователя и встроенные получают событие. Источник: code.claude.com

Опция allowManagedModsOnly под ключом cc-plugin-sec-default@builtin в managed settings запрещает все пользовательские моды: загруженные через --plugin-dir, установленные из маркетплейса и написанные Claude в сессии — все они перестают грузиться. Активны остаются только моды, явно перечисленные в enabledPlugins организации, и встроенные. Административно дополнять инфраструктуру планирует и сама Anthropic: предстоящее IPO компании предполагает расширение enterprise-направления, включая инструменты управления Claude Code в корпоративной среде.

Команды используют моды для собственных средств контроля:

  • CI/CD-статус: мод показывает состояние пайплайна в боковой панели и обновляет его по мере прохождения билдов
  • Производственные ограждения: мод требует подтверждения перед любой командой, затрагивающей production-конфигурацию
  • Аудитный лог: мод, загруженный первым через prependPlugins, записывает каждый вызов каждого другого мода

Если организация разворачивает собственный мод вместо sec-default, рекомендация документации — добавить sec-default в список явно, чтобы сохранить его ограничения.

Встроенные моды и где моды работают

Часть функций Claude Code уже поставляется модами — например /diff это мод cc-plugin-diff, который можно выключить или заменить своим; рисуют панели и строки моды везде, где загружается плагин, однако отображается это только в терминале и Desktop-приложении. Встроенный мод, в отличие от settings hook, выполняется внутри процесса Claude Code и может рисовать полноценный интерфейс.

Просмотреть встроенные моды можно в /plugin, вкладка Installed, раздел Built-in. Обновить или удалить их нельзя, каждый выключается отдельно. Помимо cc-plugin-diff (командная панель /diff), в список входят: cc-plugin-agents-md (загружает AGENTS.md как инструкции проекта), cc-plugin-sec-default (защитный, описан выше), cc-plugin-telemetry (аналитика использования), cc-plugin-you-should-know (боковой агент-подсказчик, по умолчанию выключен). Исходники части встроенных модов открыты в официальном репозитории Claude Code в каталоге mods.

Anthropic намерена переводить всё больше функций Claude Code в моды — идея в том, чтобы оставить небольшое ядро, а остальное сделать заменяемым. Если выключить cc-plugin-diff, команда /diff продолжит работать через встроенный fallback. Это позволяет, например, полностью переписать отображение результата инструмента или заменить диалог вопроса Claude на собственный компонент.

Хуки мода выполняются в любой сессии, загрузившей плагин: Claude Code в терминале (включая встроенный терминал VS Code, JetBrains и любой другой), вкладка Code в Claude Desktop, VS Code-расширение, claude -p, Agent SDK, Remote Control и облачные сессии. Рисование интерфейса — панели, полосы, перерисованные строки — работает только в терминале и Desktop-приложении; в WSL-сессии, запущенной из Desktop, плагины вообще недоступны и мод не загрузится. Мод, использующий $.ui, может проверить среду выполнения через Mods API и при необходимости откатиться к строке в транскрипте вместо графического элемента.

Где работают моды Claude Code: терминал, Claude Desktop, VS Code, claude -p, Agent SDK, Remote Control, облачные сессии
Где срабатывают хуки мода и где виден его интерфейс. Источник: code.claude.com

FAQ

На каком языке пишут моды для Claude Code?

Моды пишут на JavaScript или TypeScript. Код мода — это обработчики событий (event handlers), которые Claude Code вызывает при наступлении тех или иных событий в сессии.

Можно ли перезагрузить мод без перезапуска сессии?

Да. Если вы установили или обновили мод из командной строки, пока сессия открыта, выполните команду /reload-plugins прямо в сессии — мод загрузится немедленно.

Что происходит, когда одно событие перехватывают несколько модов?

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

Можно ли модом отправить запрос к другой модели?

Да. Мод может перехватить запрос к Claude и перенаправить его к другой модели — это один из примеров того, что умеет мод, но не умеет обычный хук из файла настроек.

Можно ли заменить встроенную команду /diff своим модом?

Да. Встроенная команда /diff теперь сама является модом, поэтому её можно отключить через /plugin или полностью заменить собственной реализацией. Anthropic планирует переводить и другие встроенные функции в моды.

Где взять готовые примеры модов?

Примеры доступны в каталоге Claude (claude.ai/directory), а также в публичном репозитории Anthropic на GitHub. Кроме того, некоторые встроенные функции Claude Code сами являются модами и служат наглядным образцом.

Из скольких файлов состоит минимальный мод?

Минимальный мод состоит из трёх файлов: plugin.json — манифест, hooks.json — указывает на код через ключ modules, и register.js — сам код с обработчиками событий (hooks module).

Как проверить, что мод делает, не запуская его код?

Выполните команду claude plugin validate — она выводит строки hooks: и calls:, показывая, какие события мод обрабатывает и какие методы Mods API вызывает, например $.fs.read или $.process.run, без запуска кода мода.

Истории
  • Маршрут от Claude привёл подростка на «Вдоводел»
  • 950 агентов Claude нашли в ДНК вирусов загадочную систему
  • Anthropic запретила издеваться над Claude
  • ИИ-видео с погибшим в суде: срок назначат заново
  • Журналист выпустил ИИ-песню от имени чужой группы
  • Нейросеть научилась играть в «Точки» и обыгрывает автора

Начни прямо сейчас

Доступ к самым мощным моделям ИИ в вашем браузере