Содержание
Когда Claude нужен API-ключ или пароль, у меня было два варианта, и оба так себе. Первый: вставить ключ прямо в чат. Быстро, но ключ навсегда остаётся в переписке. Второй: попросить Claude поднять локальную страничку, чтобы ввести ключ в браузере. Безопасно, но каждый раз это отдельная маленькая задача.
Недавно в Claude Code появились моды, и я сделал мод secret-drop. Теперь, когда Claude нужен ключ, прямо над полем ввода появляется скрытое поле. Я вставляю ключ, жму Enter, и мод сам кладёт его в .env или в секреты GitHub. Claude узнаёт только имя ключа и длину. Ниже расскажу, как этим пользоваться, как мы делали мод вместе с Claude (я не написал ни строчки кода) и где у этой защиты границы.
Ключи я даю Claude постоянно. Telegram-бот: токен от BotFather. Расшифровка голосовых: ключ OpenAI. Деплой: токен для GitHub Actions. Для вайбкодинга это обычная рутина.
Проблема в том, что всё написанное в чат становится частью разговора. Ключ остаётся в истории сессии на диске, уходит в модель с каждым следующим запросом и может всплыть там, где его не ждёшь: в логах, на скриншоте, в записи экрана. Я снимаю ролики, и засветить в кадре свой ключ OpenAI мне совсем не хочется. Подробнее о том, что вообще не стоит отправлять нейросетям, я писал в памятке по безопасности данных.
Поэтому я обычно просил: «подними локальную страницу, я введу ключ там». В ролике про Telegram-бота с оплатой я так и делал. Работает, но Claude каждый раз пишет мини-сервер, я переключаюсь в браузер, потом обратно. Хотелось, чтобы безопасный способ стал самым ленивым.
В начале октября в Claude Code появились моды. Это плагины на JavaScript или TypeScript, которые работают внутри самого Claude Code. Мод подписывается на события: Claude вызывает инструмент, вы отправляете сообщение, перерисовывается кусок интерфейса. И на каждое событие может ответить: нарисовать свою панель, добавить команду, остановить сообщение. С примерами я разбирал это в статье как сделать свой мод в Claude Code.
Многие первые моды, которые я видел, про красоту: анимации, статусы, украшения. Прикольно, но мне хотелось закрыть реальную боль. Ключи оказались идеальной задачей: здесь нужен свой кусок интерфейса прямо в чате, а скиллом или MCP-сервером его не нарисуешь.
Claude просит ключ сам
Мод даёт Claude новый инструмент request_secret и объясняет: ключи в чате не проси, вызывай инструмент. Выглядит это так. Я пишу «подключи бота к OpenAI», Claude доходит до места, где нужен ключ, и над полем ввода появляется плашка: какой ключ нужен и куда он сохранится.
Поле скрытое: вместо символов кружочки. Кнопка «Показать» нужна, если хочется проверить, что вставилось. Вставляете ключ, жмёте Enter. Если ключей несколько, плашка пройдёт по ним по очереди, любой можно пропустить.
Дальше мод всё делает сам, без Claude:
- В
.envобновляет строку на месте, если такой ключ там уже был, или дописывает новую. Новый файл получает права 600, то есть читать его можете только вы. - Следит за git. Если
.envлежит в репозитории и не попал в.gitignore, мод добавляет его туда. Если файл уже закоммичен, предупреждает. - В секреты GitHub Actions отправляет через
gh secret set. Значение идёт через stdin, а не аргументом команды, поэтому его не видно в списке процессов.
А Claude получает короткий отчёт:
[secret-drop] The user finished the secure input you requested.
Entered: OPENAI_API_KEY (51 chars).
✓ OPENAI_API_KEY → /Users/me/bot/.env
✓ added /.env to .gitignoreИмя, длина и куда сохранено. Самого ключа в разговоре нет. Дальше Claude работает с ним через окружение, как с любой переменной из .env.
Или открываете поле сами
Иногда ключ хочется положить заранее, не дожидаясь вопроса. Для этого есть команда /secret:
/secret OPENAI_API_KEY
/secret DEPLOY_TOKEN --github
/secret DEPLOY_TOKEN --github owner/repo
/secret DB_PASSWORD --env-file config/.env.localБез флагов ключ уходит в .env в папке проекта. Флаг --github кладёт его ещё и в секреты GitHub Actions текущего репозитория, а если указать owner/repo, то другого. --env-file меняет файл. Можно перечислить несколько имён через пробел, плашка спросит их по очереди.
Страховка от привычки
Руки помнят Cmd+V прямо в чат. Поэтому мод проверяет каждое сообщение перед отправкой, и если видит в нём ключ, сообщение до Claude не доходит. Вместо него сразу открывается та же плашка, только ключ в ней уже подставлен точками, а имя мод угадал по формату, например ELEVENLABS_API_KEY. Имя можно поправить, Enter сохраняет ключ.
А сообщение возвращается в поле ввода, и на месте ключа там стоит его имя с пометкой, куда он сохранён: ELEVENLABS_API_KEY (сохранён в .env в папке проекта). Отправляете, и Claude понимает, какую переменную брать. Если ключ сохранять не надо, есть кнопка «Не сохранять», и тогда Claude вообще ничего не узнает.
Мод узнаёт ключи OpenAI, Anthropic, ElevenLabs, GitHub, GitLab, AWS, Google, Stripe, Groq, xAI, Perplexity, Replicate, npm, Яндекса, Slack, Supabase, Hugging Face, токены Telegram-ботов и приватные ключи. А если в сообщении есть слова «ключ», «токен», «пароль» или их английские версии, он ловит и длинные строки из букв и цифр незнакомого формата.
Код я не писал вообще. Весь мод Claude собрал в одном диалоге, а я был заказчиком, которому вечно что-то не нравится: ставил задачу, смотрел, кидал скриншоты и говорил, что не так. По-моему, самое интересное тут не результат, а итерации.
Сайдбар переехал в плашку над полем ввода
Первую версию Claude сделал отдельной панелью справа, сбоку от чата. Логика понятная: такую панель проще всего сфокусировать. Но выглядело это как окно настроек, а ключ нужен прямо сейчас, посреди разговора. Я спросил: почему в сайдбаре? Можно же прямо над чатом, другие моды так делают. Claude переделал.
Вывод: агент часто выбирает решение, которое проще сделать, а не которым удобнее пользоваться. Если видели, как сделано у других, так и скажите.
«Бедно»
Вторая версия жила уже над полем, но выглядела как текст и пара кнопок. Я так и написал: бедно. Без подробностей, что именно не так.
Claude пошёл смотреть, как устроены моды, которые выглядят хорошо. Разобрал plan-progress с пиксельными прогресс-барами и понял: на десктопе красота рисуется через SVG. Скругления, иконки Lucide, шрифт Anthropic Sans, фирменный цвет Claude. По этому образцу он сделал карточку с пиксельной текстурой и бейджем-ключом.
Вывод: не бойтесь коротких оценок вроде «бедно». Агенту хватает этого сигнала, чтобы пойти искать референсы, а не двигать кнопки на пару пикселей.
«Покажи варианты»
Дальше упёрлись в поле ввода: хотелось растянуть его на всю ширину плашки, а оно не растягивалось. Вместо того чтобы пробовать вслепую по одному варианту за ход, Claude нарисовал четыре варианта обёртки, A, B, C и D, на одном экране. Я сделал один скриншот, и всё стало ясно: родное поле ввода на десктопе фиксированной ширины, как его ни оборачивай.
Раз поле не растянуть, дизайн построили вокруг него: тихая шапка с названием ключа и одна яркая оранжевая подсказка «Вставь ключ →», у которой стрелка покачивается в сторону поля. Глаз сразу понимает, куда вставлять.
Вывод: «покажи несколько вариантов сразу» экономит кучу кругов. Один скриншот с четырьмя вариантами заменил полчаса переписки.
Мод не может ждать человека
Технический нюанс, который Claude раскопал сам. У функции мода есть примерно 10 секунд своего времени, а человек ищет ключ в личном кабинете OpenAI минуту, а то и пять. Держать вызов инструмента открытым всё это время нельзя.
Поэтому инструмент сразу отвечает Claude «плашка открыта, жди», и ход заканчивается. Когда я ввёл ключ, мод сам отправляет Claude отчёт новым сообщением, и тот продолжает с того места, где остановился.
Тесты поймали то, чего я бы не увидел
У модов есть свои тесты: claude plugin test прогоняет события без живого Claude Code. Тесты нашли баг: в терминале шапка плашки просто пропадала. Терминал не рисует SVG, а проверка в коде думала, что рисует. Для терминала оставили текстовую версию плашки. Я сижу в десктопном приложении и сам бы этого никогда не заметил.
Публикация
В конце Claude выложил мод в публичный репозиторий на GitHub с маркетплейсом, чтобы он ставился одной командой, и написал README на английском и русском.
Если собрать всё в три правила работы с агентом: скриншоты вместо описаний, «покажи варианты» вместо «попробуй ещё раз» и честное «бедно», когда бедно.
- Защищает переписку, а не файл. Если разрешить Claude выполнить
cat .env, ключ всё равно окажется в контексте. Мод просит Claude так не делать, но последнее слово за вами: на такую команду отвечайте «нет». - Поле на десктопе фиксированной ширины. Длинный ключ прокручивается внутри поля, это не баг.
- Мод работает с вашими правами, как любой мод. Ставьте моды только от тех, кому доверяете. Мой код открыт, его можно прочитать до установки.
Нужен Claude Code с модами, то есть версия 2.1.287 или новее. Если Claude Code ещё не стоит, начните со статьи как установить Claude Code. Дальше в терминальной сессии Claude Code выполните:
/plugin install secret-drop --marketplace aislam23/secret-dropСогласитесь добавить маркетплейс и выберите установку для пользователя (user scope). После этого мод работает и в терминале, и во вкладке Code десктопного приложения Claude.
Код и подробный README: github.com/aislam23/secret-drop. Если чего-то не хватает или нашли баг, пишите в issues.
P.S. Если раньше вы вставляли ключи прямо в чат, ничего страшного, но перевыпустите их. Это пять минут в личном кабинете сервиса, а спать спокойнее.
Частые вопросы
Что такое secret-drop?
Это мод для Claude Code, который передаёт Claude API-ключи и пароли без вставки в чат. Когда Claude нужен ключ, над полем ввода появляется скрытое поле. Мод сам сохраняет значение в .env или в секреты GitHub Actions, а Claude узнаёт только имя ключа и длину.
Увидит ли Claude мой ключ?
Нет, значение не попадает в разговор: Claude получает отчёт вида «OPENAI_API_KEY (51 chars) → .env». Но если разрешить Claude прочитать файл командой cat .env, ключ окажется в контексте, поэтому на такие команды стоит отвечать отказом.
Куда мод сохраняет ключ?
По умолчанию в .env в папке проекта: строка обновляется на месте, новый файл получает права 600, а .env добавляется в .gitignore. С флагом --github ключ уходит ещё и в секреты GitHub Actions через gh secret set, другой файл задаётся флагом --env-file.
Что будет, если вставить ключ прямо в сообщение?
Сообщение не отправится. Мод узнаёт ключи OpenAI, Anthropic, ElevenLabs, GitHub, AWS, Google, Stripe, Supabase, токены Telegram-ботов и ещё десяток форматов, сразу открывает плашку с подставленным ключом и угаданным именем. Enter сохраняет ключ, а сообщение возвращается в поле ввода с именем ключа вместо самого ключа.
Работает ли secret-drop в приложении Claude?
Да. Мод ставится в терминальной сессии Claude Code командой /plugin install secret-drop --marketplace aislam23/secret-drop, и после установки для пользователя работает и во вкладке Code десктопного приложения.
Сколько стоит мод?
Нисколько, код открыт на GitHub под лицензией MIT. Нужен только сам Claude Code версии 2.1.287 или новее.
