Sejf na klucze API dla agentów AI

Twój agent korzysta z kluczy API, ale nigdy ich nie widzi

KeyVault przechowuje klucze zaszyfrowane i przekazuje je Claude Code, Cursorowi i innym klientom MCP jako lokalny plik. Klucz jest odszyfrowywany na Twoim komputerze, więc nie trafia do czatu, transkryptu ani kontekstu modelu.

Szyfrowanie odbywa się w przeglądarce. Serwer przechowuje wyłącznie szyfrogramy.

# agent prosi o klucz› get_secret("openai")Secret 'openai' decrypted on device → ~/.config/keyvault/openai.env (mode 600, defines $KV_OPENAI).# i używa go, nie wypisując go$ source ~/.config/keyvault/openai.env && curl -H "Authorization: Bearer $KV_OPENAI" …# gotowe? usuń go z dysku› forget_secret("openai")Removed ~/.config/keyvault/openai.env.
To, co naprawdę dostaje agent: ścieżkę, a nie klucz.

Raz wklejony klucz żyje dłużej niż zadanie

Wystarczy wkleić klucz do czatu, żeby agent mógł wywołać API, i od tej chwili siedzi on w historii rozmowy, w transkrypcie sesji i w każdym logu, który je przechowuje. Nie da się go stamtąd zabrać. Można go tylko wymienić.

  • Transkrypty i historia czatu przechowują klucze długo po zakończeniu pracy.
  • Jeden stack trace albo wypis debugowy wystarczy, żeby klucz trafił prosto do kontekstu modelu.
  • Wspólny klucz dla wszystkich narzędzi oznacza, że nie odetniesz jednego, nie psując reszty.

Jak to działa

  1. Zapisz klucz

    Dodaj go w aplikacji webowej. Zanim cokolwiek zostanie wysłane, przeglądarka szyfruje go kluczem wyprowadzonym z Twojego hasła głównego (Argon2id).

  2. Zdecyduj, co mogą czytać agenci

    Dostęp dla agentów jest domyślnie wyłączony. Włączasz go osobno dla każdego sekretu, a każdy agent dostaje własny token, w razie potrzeby ograniczony do wybranych kluczy.

  3. Agent go używa

    Serwer MCP KeyVault odszyfrowuje klucz na Twoim urządzeniu, zapisuje go w pliku, który możesz odczytać tylko Ty (uprawnienia 600), i podaje agentowi ścieżkę. Agent wczytuje go przez source, a po wszystkim forget_secret usuwa plik.

Co widzi serwer, a czego nie

KeyVault jest zbudowany tak, żeby serwer nie miał czego ujawnić. Oto, co dokładnie jest przechowywane i gdzie odbywa się odszyfrowanie.

  • Sejf zero-knowledge

    Hasło główne nigdy nie opuszcza przeglądarki. Sekrety są szyfrowane biblioteką libsodium (Argon2id + secretbox), a serwer przechowuje tylko szyfrogramy, których nie potrafi odczytać.

  • Kopie dla agentów zapieczętowane dla Twojego urządzenia

    Sekrety udostępnione agentom są szyfrowane (RSA-OAEP + AES-GCM) kluczem, który istnieje tylko na Twoim urządzeniu. API wydaje szyfrogram, a odszyfrowanie odbywa się lokalnie.

  • Tokenów nie wyciągniesz z bazy

    Tokeny agentów to 256-bitowe losowe wartości. W bazie zapisywany jest tylko ich skrót SHA-256, więc kopia bazy nie zawiera żadnego działającego tokenu.

  • Dziennik dostępu

    Każdy odczyt przez agenta trafia do dziennika: token, klucz, wynik i adres IP. Wpisy są przechowywane przez 30 dni.

  • Limity zapytań

    Jeden token może wykonać najwyżej 60 zapytań na minutę.

  • Pilnowane w kodzie

    Skrypt kontrolny w kodzie projektu zgłasza błąd, jeśli w backendzie pojawi się kod odszyfrowujący sekrety po stronie serwera.

Ty decydujesz, który agent czyta który klucz

  • Osobny token dla każdego agenta

    Claude Code, Cursor i CI dostają osobne tokeny. W dzienniku widać, kto co odczytał, a unieważnienie jednego tokenu nie psuje pozostałych.

  • Tokeny z ograniczonym zakresem

    Ogranicz token do wybranych kluczy. Wszystko poza zakresem wygląda dla niego tak, jakby nie istniało.

  • Parowanie urządzeń

    Nowe urządzenie zatwierdzasz w przeglądarce, porównując krótki odcisk klucza widoczny w obu miejscach. Każde urządzenie dostaje własny klucz i token, a link do parowania wygasa po 30 minutach.

  • Czyste odwołanie

    Odwołanie urządzenia unieważnia jego tokeny i usuwa wszystkie zapieczętowane dla niego klucze, więc nie zostaje nic, o co mogłoby poprosić albo co mogłoby odczytać.

Działa z lokalnymi klientami MCP

Serwer MCP KeyVault działa lokalnie przez stdio, więc współpracuje z każdym klientem, który potrafi uruchomić lokalny serwer MCP, m.in.:

  • Claude Code
  • Claude Desktop
  • Cursor
  • Windsurf
  • Cline
  • Roo Code
  • VS Code (agent Copilota)
  • Zed

Agenci działający w chmurze, którzy nie mogą uruchomić lokalnego procesu, zobaczą listę kluczy, ale ich nie odszyfrują. Do tego potrzebny jest klucz na prawdziwym urządzeniu — i tak ma być.

Cennik

Zacznij za darmo, a na płatny plan przejdź wtedy, gdy będzie Ci potrzebny.

  • Darmowy

    0 zł

    TODO: co obejmuje plan darmowy i jakie ma limity.

    Zacznij za darmo
  • TODO: nazwa planu płatnego

    TODO: cena miesięcznie

    TODO: co dodaje plan płatny.

Pytania

Czy KeyVault może odczytać moje klucze?

Nie. Wszystko jest szyfrowane, zanim dotrze do serwera: sejf webowy kluczem wyprowadzonym z Twojego hasła głównego, a kopie dla agentów kluczem, który istnieje tylko na Twoim urządzeniu. Serwer przechowuje szyfrogramy i nie ma żadnego z tych kluczy.

Co jeśli zapomnę hasła głównego?

Sekretów nie da się odzyskać — ani Tobie, ani nam. Taka jest cena tego, że serwer nigdy nie zna Twojego klucza. Wybierz hasło, które zapamiętasz, albo trzymaj je w menedżerze haseł.

Czy klucz trafia do kontekstu agenta?

Nie. get_secret zwraca ścieżkę do pliku i nazwę zmiennej środowiskowej, nigdy samą wartość. Agent używa klucza przez source, więc agenci, którzy maskują sekrety, nie mają czego maskować.

Co nie jest szyfrowane?

Nazwa, slug, kategoria i opis, które nadajesz sekretowi, a także dziennik dostępu i Twój adres e-mail. Nie wpisuj w nazwach ani opisach niczego poufnego.

Jak podłączyć agenta?

Dodaj serwer MCP KeyVault do konfiguracji swojego klienta. Dla Claude Code, Cursora, Windsurfa i pozostałych to ten sam fragment konfiguracji. TODO: link do instrukcji instalacji.

Przestań wklejać klucze do czatu

Załóż sejf, podłącz agenta i od dziś trzymaj klucze z dala od transkryptów.