Claude Code

Безопасность Claude Code упирается в ключи

Система разрешений решает, какие инструменты Claude Code может запускать. О том, до чего эти инструменты дотянутся, она не говорит ничего, а дотянутся они до любого секрета на вашей машине. Sallyport убирает ключи туда, где агент их не прочитает.

разрешения заканчиваются на инструментеодна разрешённая команда шелла читает .envдыра там, где лежит ключ
Разрешения

Что запросы разрешений закрывают на самом деле

Claude Code спрашивает, прежде чем запустить инструмент, который вы не разрешили. Правила лежат в settings.json списками allow, ask и deny, и настроить их как следует стоит.

allow

Инструменты, разрешённые заранее

Правило вроде Bash(git commit:*) пропускает эту команду без остановки. Правило описывает команду, а не то, что команда откроет, когда запустится.

без запроса

ask

Всё, чего нет в списках

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

запрос

deny

Пути и инструменты, которые вы закрыли

Правило deny не пускает инструмент Read в ./.env. Оно не мешает разрешённой команде шелла открыть тот же файл и ничего не решает про процессы, которые запускают ваши зависимости.

закрыто частично

bypass

Запросов нет вообще

Флаг --dangerously-skip-permissions снимает вопрос целиком. Про него ниже отдельный раздел.

без запроса

Все эти правила про инструменты агента. Ни одно из них не про файл, который инструмент читает. Ваши API-токены лежат в .env, ключ SSH в ~/.ssh, и оба доступны любому процессу, запущенному от вашего имени, с запросами или без.

YOLO-режим

Что на самом деле отключает --dangerously-skip-permissions

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

Он выключает подтверждения, а не возможности

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

Файл и так читался

Запрос был шансом поймать агента на открытии .env. Преградой вокруг самого файла он не был никогда. Прочитать его может любой процесс от вашего имени, включая ту зависимость, которую npm поставил, пока вы читали запрос.

Радиус равен возможностям вашего шелла

Одна prompt injection на загруженной странице, один отравленный README в транзитивной зависимости, и эти инструкции оказываются внутри сессии, где лежат ваши ключи и не осталось ни одного запроса.

YOLO-режим отнимает у вас шанс заметить. Ключи в досягаемости не он сделал: они были в досягаемости и в обычном режиме.

Security review

Проверять свой код - другая работа

Claude Code прочитает дифф и отметит в нём уязвимости, и пусть отмечает. Эта работа про код, который вы выкатываете. Про то, до чего дотягивается сам агент во время работы, она не говорит ничего, а именно об этом вся страница. Это разные задачи, и решение одной ничего не даёт другой.

Решение

Уберите ключи со стола

Sallyport держит ключ и делает вызов сам. Claude Code просит действие и получает результат. В его окружение ключ не попадает, поэтому пропущенному запросу, отравленной зависимости и внедрённой инструкции просто нечего унести.

  1. 01

    Агент просит действие

    http.request на api.stripe.com или ssh.exec на prod-03. Приходит по MCP, ровно так же, как Claude Code вызывает любой другой инструмент.

  2. 02

    Sallyport решает

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

  3. 03

    Sallyport выполняет вызов

    Ключ подставляется внутри приложения, во время выполнения. В окружение агента он не попадает, и редирект на другой хост его с собой не уносит.

  4. 04

    Журнал хранит квитанцию

    Зашифровано и связано хешами прямо в момент действия. Узнать, что происходило, можно не полагаясь на рассказ самого агента.

Дальше запускайте Claude Code как вам удобно, с запросами или без. Решение, которое имело значение, из агента ушло.

Настройка

Направьте Claude Code в гейт

Sallyport живёт в строке меню и держит хранилище внутри своего процесса. Никакого демона и никакого аккаунта.

01

Установите и запустите

Онбординг создаёт хранилище и включает его гейт по Touch ID.

brew install --cask olegsotnikov/tap/sallyport
02

Зарегистрируйте MCP-шим

Claude Code получает http.request, ssh.exec и любой внешний MCP-сервер, который вы пустили через Sallyport.

claude mcp add sallyport -- /Applications/Sallyport.app/Contents/MacOS/sp mcp
03

Перенесите ключ и удалите копию

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

stripe → api.stripe.com · подтверждение каждого вызова

Минуты две. Запросы, которые останутся, показывает Sallyport, и спрашивают они про действия на настоящей инфраструктуре, а не про то, какому инструменту можно запуститься.

Частые вопросы

Claude Code и Sallyport

Можно и дальше пользоваться --dangerously-skip-permissions?
Да, и это становится куда разумнее, когда ключи вне досягаемости. Подтверждения Sallyport живут отдельно от подтверждений Claude Code: пропустив одни, вторые вы не пропустите.
Это замедлит Claude Code?
Одна карточка на запуск агента, дальше до конца запуска ничего, если только вы не пометили ключ как требующий подтверждения каждого вызова. Подтверждённые вызовы идут со скоростью того API, к которому обращаются.
Видит ли Claude Code ответ API?
Да. Sallyport отдаёт ответ цели как есть и содержимое не разбирает. Если сервис вернёт секрет внутри собственного ответа, агент этот ответ увидит. Запросы идут через гейт; ответы не фильтруются.
Sallyport - это плагин для Claude Code?
Нет. Это Mac-приложение с MCP-шимом, поэтому оно работает с любым MCP-клиентом, и обновление Claude Code здесь ничего не ломает.
А Cursor, Codex и остальные?
Механизм тот же, они все говорят по MCP. Больше всего мы тестируем на Claude Code, Cursor и Codex тоже в постоянной ротации.

Пусть пропускает все запросы. Ключи он всё равно не прочитает.

Бесплатная загрузка. Apple Silicon, macOS 14 или новее. Аккаунт не нужен. Никогда.

$brew install --cask olegsotnikov/tap/sallyport

macOS 14+ · Apple Silicon

Sallyport

Sallyport выполняет API-вызовы и SSH-команды за вашего ИИ-агента. Ключи остаются в локальном хранилище на вашем Mac; вы подтверждаете каждый запуск, и каждое действие попадает в запечатанный журнал.

© 2026 Sallyport · Открытый код по лицензии Apache-2.0 · Oleg Sotnikov