keypaste — KeePass-совместимый менеджер паролей и секретов для работы с ИИ-агентами

· 6 мин чтения
mcp security secrets-management password-manager ai-agents
📂 Исходный код на GitHub

KeePass-совместимый менеджер паролей и секретов: локальное KDBX-хранилище, MCP-сервер с одобрением каждого запроса агента, запуск команд без .env и аудит с хеш-цепочкой.

keypaste — KeePass-совместимый менеджер паролей и секретов для работы с ИИ-агентами

keypaste

keypaste — менеджер паролей и секретов, совместимый с KeePass. Проект создан для тех, кто работает с ИИ-агентами. Все данные лежат в одном локальном файле KDBX на вашем диске: без аккаунта, без сети, без облака. Главный принцип проекта прост: агент получает секрет только тогда, когда человек лично разрешил выдачу.

Код открыт под лицензией AGPL-3.0. Опубликованная версия — CLI и MCP-сервер v0.3.0. Десктопное приложение существует в исходном коде, но публичного релиза у него ещё нет. Часть возможностей из документации появится только в версии 0.5.0 — README честно помечает каждое такое место.

Хранилище в формате KeePass

Файл хранилища — обычный KDBX 4. Его открывает и редактирует KeePassXC, а CI проекта на каждой значимой сборке проверяет совместимость в обе стороны с keepassxc-cli на Linux, macOS и Windows. keypaste не придумывает собственный формат и не пишет криптографию сам: слой формата — это встроенная в проект библиотека KeePassLib из KeePass 2.61, спрятанная за одним файлом-прослойкой.

Внутри — логины с заголовком, именем пользователя, паролем, адресом и заметками, разложенные по группам. Поиск идёт по заголовкам, именам и адресам и никогда не читает сами пароли. Генератор создаёт пароли от 8 до 256 символов из алфавита без знаков, опасных для shell, YAML и URL, либо парольные фразы из списка EFF. Есть история всех изменений с откатом в один шаг и шифрованные резервные копии рядом с хранилищем. Команда keypaste import переносит данные из другого KDBX-файла или продолжает работать с ним на месте.

Зашифрованный файл можно возить любым привычным сервисом синхронизации: своего механизма слияния у keypaste нет.

Одобрение запросов от агента

Через MCP-сервер агент видит два инструмента. list_entry_names возвращает пути групп и имена записей — и никогда значения. request_credential запрашивает одно поле одной записи — вместе с объяснением, зачем оно агенту. Запрос прилетает в терминал, где вы сами запустили keypaste agent: эта команда разблокирует хранилище и показывает подтверждения.

keypaste: an agent is asking for a credential.

  agent    claude-code (claude-code)
  item     env/demo/.env
  field    STRIPE_KEY

  the agent says it needs this because:
    deploy the billing service to staging

  That sentence was written by the agent, not by keypaste. Treat it as a claim.

[d] deny  [o] once  [h] 1 hour

Здесь важна каждая деталь. keypaste прямо предупреждает: объяснение написано агентом, и воспринимать его стоит как утверждение, а не как факт. Варианты ответа — отказ, разрешение один раз или на час. Молчание в течение 45 секунд тоже означает отказ. Явный отказ сообщает агенту, что повторять запрос бессмысленно.

Мастер-пароль вводится только в keypaste agent — команде, которую запускаете вы сами. Агент не может вызвать запрос пароля, поэтому локальная программа-имитатор не сможет подделать привычное окно ввода.

Проекты и переменные окружения

Отдельная подсистема заменяет файлы .env. Переменные живут в хранилище в ветке env/<project>, у каждого проекта — свои наборы значений для dev, staging и prod, а prod всегда требует живого подтверждения. Импорт из существующего .env проходит с проверкой всего файла: при малейшей ошибке хранилище остаётся нетронутым.

Парсер понимает префиксы export, комментарии, три стиля кавычек и многострочные значения. Символ # начинает комментарий только после пробела, поэтому значение hunter2#42 сохраняется целиком. Дубликаты ключей считаются ошибкой, а конструкции ${VAR} не подставляются, чтобы не привязывать хранилище к окружению конкретной машины.

Экспорт в открытый текст требует явного шага: keypaste предупреждает о записи файла, отказывается перезаписывать само хранилище даже с флагом --force и создаёт файлы, читаемые только владельцем. Есть альтернатива без значений: файл .env.keypaste содержит ссылки вида KEY=kp://project/profile/KEY и ничего больше. Такой файл можно спокойно коммитить — значения подставляются в момент запуска. В исходном коде уже готова и пара других инструментов для командной работы: ограниченные по правам и сроку токены для CI и разовые ссылки для передачи одного секрета.

Запуск команд без .env

Команда keypaste run кладёт переменные проекта в окружение дочернего процесса — и только туда. Ничего на диск не пишется:

keypaste init ~/vault.kdbx
export KEYPASTE_VAULT=~/vault.kdbx

keypaste env pull dev
keypaste run dev -- npm start

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

Аудит и правила доступа

Каждый вызов агента — разрешённый, отклонённый и даже некорректный — попадает одной строкой в ~/.keypaste/audit.jsonl. Возвращённое значение в журнал не пишется. Каждая запись содержит хеш предыдущей, а keypaste log verify проверяет целостность цепочки — и честно перечисляет ограничения: полностью пересобранную цепочку или удаление записей с конца такая проверка не заметит.

В v0.3.0 заранее выданное разрешение описывается узкими правилами в файле ~/.keypaste/policy.toml. В версии 0.5.0 на смену им приходят настройки каждого агента прямо в хранилище: что ему видно, выдаются ли значения, может ли он запускать команды и в каком режиме он работает — спрашивать каждый раз, разрешать на срок или действовать автоматически с лимитом в час. Любое расширение прав требует подтверждения там, где хранилище разблокировано; сужение применяется сразу. Настройки хранятся в опубликованном формате ACAF v1, который смогут читать и другие KeePass-приложения.

Границы модели описаны без прикрас в THREATS.md: там разобраны подмена инструкций (prompt injection), неподлинные клиенты, усталость от бесконечных подтверждений, кешированные разрешения и подделка журнала. Истечение срока одобрения отменяет только кеш keypaste: копию значения у клиента и сам пароль в исходном сервисе это не отзывает.

Установка

Проект раздаёт нативные бинарники, которым не нужен установленный .NET: macOS на Apple Silicon, Linux на x64 и arm64, Windows на x64. Архив стоит проверять контрольной суммой. Сами бинарники пока не подписаны, и страница установки честно объясняет границу: checksum подтверждает целостность загрузки, но не подлинность издателя.

curl -fLO https://dl.keypaste.com/v0.3.0/keypaste-0.3.0-osx-arm64.tar.gz
curl -fLO https://dl.keypaste.com/v0.3.0/keypaste-0.3.0-osx-arm64.tar.gz.sha256
shasum -a 256 -c keypaste-0.3.0-osx-arm64.tar.gz.sha256
tar -xzf keypaste-0.3.0-osx-arm64.tar.gz
mkdir -p ~/.local/bin && mv keypaste keypaste-mcp ~/.local/bin/

Для Linux замените имя файла на linux-x64 или linux-arm64. Требования: macOS 14+, Linux с glibc 2.35, Windows 10 1809+. Для Intel-маков, musl-дистрибутивов вроде Alpine и Windows на ARM единственный путь — сборка из исходников через .NET SDK.

Подключение к Claude Code или Claude Desktop делается одной командой. Она находит установленные клиенты и прописывает конфигурацию через их механизм mcp add:

keypaste setup --vault ~/vault.kdbx

Мастер-пароль в конфигурацию клиента не попадает. Подробности о настройке и чтении аудита — в руководстве по подключению.

Статус проекта

Проект молодой и не скрывает этого. Опубликованный v0.3.0 помечен как pre-1.0: авторы прямо рекомендуют заменить v0.2.0 и v0.1.0, у которых были дефекты с потерей изменений при одновременном сохранении. Десктопного релиза нет. Часть документации описывает возможности будущей версии 0.5.0, и на каждой такой позиции стоит пометка. При этом качество сборки поддерживается всерьёз: тесты прогоняют реальные процессы CLI и MCP, а совместимость с KeePassXC — постоянное условие слияния изменений, а не разовая проверка.

Сообщения об уязвимостях принимаются по почте, а не через открытый трекер — процедура описана в SECURITY.md.

Источник: https://github.com/notinferred/keypaste