Пустите агента в прод.Ключи оставьте себе.
Sallyport держит учётные данные в локальном хранилище и сам выполняет API-вызовы и SSH-команды за агента. Каждый запуск вы подтверждаете кликом или через Touch ID. Нет команды, которая показала бы сохранённый ключ, и кнопки экспорта тоже нет.
brew install --cask olegsotnikov/tap/sallyportmacOS 14+ · Apple Silicon · Apache-2.0 · Бесплатно · без аккаунта · без облака
Для инженеров, которые пускают Claude Code, Cursor или Codex к настоящей инфраструктуре
Подтверждение в рабочем контексте
Этот ключ требует подтверждения при каждом использовании. Вызов ждёт вашего решения.
⏺ sallyport · http.request
PATCH api.cloudflare.com/client/v4/zones/…/dns_records
⎿ key cloudflare · flagged approval per call
⎿ ожидание подтверждения...
Требуется подтверждение
http.request → api.cloudflare.com
claude ← node ← zsh
Сейчас агент может прочитать ваши ключи
API-токены в .env, SSH-ключи на диске, OAuth-гранты в конфигах. Всё это читает и сам агент, и каждый пакет, который он подтягивает. А одного отравленного README хватит, чтобы увести их наружу.
Секреты открыты процессу
Токены в .env и переменных оболочки, SSH-ключи на диске, OAuth-токены в конфигах. Их читает агент, его дочерние процессы и всё, что npm поставил сегодня.
Инъекция в промпт превращается в кражу
Вредоносная страница или README велит агенту отправить токен на новый адрес, и агент подчиняется. Он для того и создан, чтобы выполнять инструкции.
Вы узнаёте из счёта
Без шлюза не остаётся записи о том, какие вызовы сделал агент, куда он их отправил и что в них было. Украденные ключи всплывают через недели, по чужому расписанию.
Три, которые уже случились
Май 2026
Атака на npm через TanStack
84 вредоносные версии в 42 пакетах собирали облачные учётные данные, токены GitHub и SSH-ключи прямо во время установки, а затем расползались через пакеты самих жертв.
Конец 2025
Червь Shai-Hulud
Скомпрометированные npm-пакеты крали секреты при установке и с помощью украденных данных заражали следующую партию пакетов.
Август 2025
Nx S1ngularity
Отравленный сборочный инструмент сканировал машины разработчиков в поисках секретов, пробовал локальные AI-инструменты и выгружал добычу через GitHub CLI.
Все три собирали ключи из переменных окружения и файлов на диске. Sallyport не держит рабочие ключи ни там, ни там.
Агенту ключи не нужны
Агент отправляет запрос: вызови этот API, выполни эту команду на таком-то хосте. Sallyport подставляет учётные данные внутри приложения, выполняет вызов и возвращает результат. Ключ не попадает в окружение агента, а запечатанный журнал показывает, что выполнялось и кто это подтвердил.
Фиксированная лестница решений
Каждое действие поднимается по одной и той же вшитой лестнице. Здесь нет языка правил, который можно настроить неправильно, и нет движка правил, который со временем протухнет; необязательный список разрешений может пропустить запрос подтверждения сессии для доверенных идентификаторов кода.
Модель доверия
блокировка хранилища
Хранилище блокирует всё
При запуске хранилище заблокировано. Secure Enclave и Touch ID защищают доступ к его данным. До разблокировки Sallyport отклоняет все действия.
подтверждение каждого вызова
Помеченные ключи требуют подтверждения каждый раз
Ключ с пометкой "Подтверждение на каждый вызов" требует клик или Touch ID при каждом использовании, в том числе внутри подтверждённой сессии.
подтверждение сессии
Одно подтверждение на запуск агента
Новый процесс агента показывает карточку с данными о подписи его кода. Подтверждение действует, пока процесс не завершится, вы не отзовёте сессию или хранилище не заблокируется.
наблюдение
Выполнить и записать
Если подтверждение сессий выключено, действия выполняются без карточек и остаются в журнале.
Гейт хранилища, ключ с подтверждением каждого вызова, гейт сессии, наблюдение. Если это нужно переложить на язык закупок: нулевые постоянные привилегии для нечеловеческой идентичности, доступ выдаётся точно в срок, человек в контуре.
Всё в одном подписанном приложении
Одно подписанное приложение для Mac держит хранилище, подтверждения и журнал. Аккаунт создавать не нужно, облачного сервиса за ним нет.
Абсолютная блокировка хранилища
Пока хранилище заблокировано, Sallyport отклоняет все действия агентов и все операции управления, кроме проверки статуса.
Шифрование на диске
Хранилище шифрует имена и значения ключей, провайдеров, привязки к хостам, список SSH и настройки.
Данные о процессе
В карточке указаны подпись кода вызывающего процесса и цепочка родительских процессов, включая неподписанные процессы.
Touch ID для изменений
Изменения конфигурации могут требовать Touch ID. Синтетический клик не пройдёт биометрическую проверку.
Журнал со слепой записью
Sallyport шифрует записи о запусках и действиях при сохранении, а затем связывает шифротекст хеш-цепочкой.
SSH с видимой командой
Sallyport видит всю SSH-команду, проверяет ключ хоста и сохраняет зашифрованную запись сессии. Приватный ключ остаётся в приложении.
Режим наблюдения
Режим наблюдения убирает карточки сессий, но сохраняет блокировку хранилища, подтверждение отдельных вызовов и журнал.
Без восстановления
Хранилище нельзя экспортировать, раскрыть или восстановить отдельным ключом. При его потере перевыпустите учётные данные у провайдеров.
HTTP, SSH и MCP
Агент подключается к Sallyport как к обычному MCP-серверу. Все действия проходят ту же лестницу и попадают в тот же журнал.
HTTP API
http.request → api.github.comПриложение выполняет HTTPS-вызов и подставляет учётные данные только во время выполнения. При перенаправлении на другой хост оно не передаёт их дальше.
SSH
ssh.exec → deploy@prod-03Помощник без состояния открывает соединение. Приложение подписывает запросы SSH, закрепляет ключи хостов и сохраняет запись сессии. Приватный ключ не попадает в помощник.
MCP-серверы
github.create_issueПроксируйте локальные stdio- или удалённые MCP-серверы через тот же шлюз. Sallyport хранит и обновляет токены OAuth 2.1.
Что на кону
84
вредоносных версий пакетов в одной npm-атаке, охотившейся за учётными данными
0
аккаунтов, облачных сервисов и телеметрии: Sallyport работает целиком на вашем Mac
1 касание
Touch ID подтверждает помеченный вызов; синтетический клик его не подделает
~2 мин
от brew install до первого вызова через шлюз
Прочитайте код, который держит ваши ключи
Хранилище, гейт подтверждения, журнал и исполнитель, который касается ваших ключей, открыты под Apache-2.0. Склонируйте и проследите путь ключа от вашего касания Touch ID до провода.
Apache-2.0 · целиком
Проверьте сами
Каждая строка, которая хранит, разблокирует или тратит ключ, лежит на GitHub. Прочитайте те места, которые вас беспокоят, и решайте.
Ничего не уходит наружу
Ни аккаунта, ни облачного сервиса, ни телеметрии. Sallyport общается только с теми хостами, на которые вы его направили.
Остаётся у вас
Apache-2.0 значит: форкайте, правьте, катите внутри своей компании. Ваша копия продолжит работать, что бы дальше ни делали мы.
Частые вопросы
Как лицензируется Sallyport?
Где хранятся мои секреты?
Приложение связывается с серверами Sallyport?
Каковы системные требования?
Что происходит, пока хранилище заблокировано?
Работает ли Sallyport с Claude Code и другими агентами?
Можно ли запускать Claude Code с --dangerously-skip-permissions?
Безопасно ли ставить MCP-сервер, который кто-то выложил в сеть?
Чем это отличается от HashiCorp Vault или 1Password CLI?
Может ли агент увидеть мои ключи?
Что делать при потере доступа к Mac?
Вашего агента отделяет от ваших ключей одна инъекция в промпт.
Бесплатная загрузка. Apple Silicon, macOS 14 или новее. Аккаунт не нужен. Никогда.
brew install --cask olegsotnikov/tap/sallyportmacOS 14+ · Apple Silicon