Sekcje bazy wiedzy ▾
Nawigacja
▸ Zacznij tutaj Według rólKategorie
- Cursor + Gonka AI — tani LLM do kodowania
- Claude Code + Gonka AI — LLM dla terminala
- OpenClaw + Gonka AI — dostępne agenty AI
- OpenCode: własny model w terminalu
- Continue.dev + Gonka AI — AI dla VS Code/JetBrains
- Cline + Gonka AI — agent AI w VS Code
- Aider + Gonka AI — programowanie w parach z AI
- LangChain + Gonka AI — aplikacje AI za grosze
- n8n + Gonka AI — automatyzacja z tanim AI
- Open WebUI + Gonka AI — Twój własny ChatGPT
- LibreChat + Gonka AI — open-source ChatGPT
- Hermes Agent + DeepSeek w sieci Gonka — autonomiczny agent za grosze
- Kilo Code + Gonka AI — agent AI w VS Code
- Roo Code + Gonka AI — autonomiczny agent AI w VS Code
- LlamaIndex + Gonka AI — aplikacje RAG za grosze
- PydanticAI + Gonka — typowane agenty AI za grosze
- Vercel AI SDK + Gonka AI — aplikacje AI w TypeScript za grosze
- TanStack AI + Gonka — aplikacje AI w TypeScript za grosze
- API szybki start — curl, Python, TypeScript
- JoinGonka Gateway — pełny przegląd
- Klucze Zarządzania — SaaS na Gonka
- Najtańsze AI API: porównanie dostawców 2026
- Jak kupić tokeny AI i klucz API: 3 sposoby w 2026 roku
- Limit zapytań Cursor Pro wyczerpany — analiza i tania alternatywa
- Claude Code taniej — analiza rachunku i przełączenie
- Cline spala pieniądze — dlaczego agent wydaje tak dużo
- OpenClaw jest drogi — dlaczego agent zużywa tokeny i jak zaoszczędzić
- OpenRouter: tania alternatywa — porównanie z JoinGonka Gateway
- Najlepszy model AI do kodowania w 2026 roku: porównanie i ceny
- Tania alternatywa dla GitHub Copilot bez limitów
- Tania alternatywa dla Windsurf bez kredytów i limitów
- Najtańsze API dla agentów AI w 2026 roku
- ZCode: tania inferencja GLM zamiast GLM Coding Plan
- JetBrains IDE + JoinGonka Gateway — własny endpoint zamiast kredytów
- GitHub Copilot BYOK — własne modele zamiast limitów
- Zed + JoinGonka Gateway — tani inferencing w edytorze
- Pi + JoinGonka Gateway — terminalowy agent na tanim inference
- Codex CLI: własny klucz zamiast subskrypcji
- DeepSeek Harness: własny dostawca przez JoinGonka Gateway
- MiniMax Code: agent MiniMax z własnym kluczem przez Gonka
- Warp + JoinGonka Gateway — agent terminalowy na własnym endpoint
- Trae + JoinGonka Gateway — modele sieci Gonka w AI-IDE
- Cherry Studio + JoinGonka Gateway — desktopowy klient AI
- omp (Oh My Pi) + JoinGonka Gateway: agent z rolami modeli
- OpenHands + JoinGonka Gateway: agent na własnym endpoincie
- Qwen Code po zamknięciu qwen-oauth: praca przez JoinGonka Gateway
- Goose + JoinGonka Gateway: własny dostawca i klucz w keyring
- Crush + JoinGonka Gateway: agent Charm na modelach sieci Gonka
- Zoo Code + JoinGonka Gateway: przeprowadzka z Roo Code na modele Gonka
- Kimi Code CLI: agent Moonshot AI na własnym kluczu przez Gonka
- Factory Droid + JoinGonka Gateway: BYOK na modelach sieci Gonka
- MiMo Code + JoinGonka Gateway: agent Xiaomi na modelach sieci Gonka
Narzędzia
Crush + JoinGonka Gateway: agent Charm na modelach sieci Gonka
Crush — terminalowy agent kodujący od Charm, zespołu, na którego bibliotekach do interfejsów konsolowych oparto dziesiątki tysięcy programów. Czyta i poprawia pliki projektu, uruchamia polecenia, pobiera kontekst z serwerów językowych (LSP), podłącza zewnętrzne narzędzia przez MCP i potrafi zmienić model w trakcie sesji, nie tracąc kontekstu. Działa w terminalach macOS, Linux i Windows, a także na Androidzie i BSD; licencja — FSL-1.1-MIT. Projekt ma znaczącą historię: archiwalne repozytorium opencode-ai/opencode bezpośrednio odsyła do Crush — projekt kontynuowali jego pierwszy autor oraz zespół Charm.
Crush akceptuje zewnętrznych dostawców dwóch rodzajów — z API kompatybilnym z OpenAI oraz Anthropic. JoinGonka Gateway łączy się jako openai-compat: jedną komendą instalatora lub kilkunastoma liniami konfiguracji. Po tym agent pracuje na modelach zdecentralizowanej sieci Gonka — DeepSeek V4 Flash, GLM-5.3 Flash oraz MiniMax M2.7 — w jednolitej cenie: $0.0069 za milion tokenów wejściowych.
Warto znać dwie cechy Crush przed pierwszą sesją: modele układa w dwóch slotach, large i small, a model wybrany w interfejsie przechowuje w oddzielnym pliku stanu, który jest ważniejszy od konfiguracji. Poświęcono im oddzielną sekcję. Polecenia i komunikaty poniżej zostały zweryfikowane poprzez uruchomienie Crush 0.96.1 przez bramę 23 września 2026 roku. Po potwierdzeniu adresu na konto trafią 3M darmowych tokenów — wystarczą, aby powtórzyć to wszystko samodzielnie.
Szybki start: instalacja i jedna komenda
Krok 1: zainstalować Crush. Oficjalne metody z README projektu:
# Homebrew
brew install charmbracelet/tap/crush
# npm
npm install -g @charmland/crush
# Arch Linux
yay -S crush-bin
# Windows
winget install charmbracelet.crush
# Go
go install github.com/charmbracelet/crush@latestTam też opisano repozytoria pakietów dla Debian, Ubuntu, Fedora i RHEL, Nix oraz Scoop, a na stronie wydań znajdują się gotowe binarki. Weryfikacja — crush --version, w odpowiedzi przyjdzie wiersz w postaci crush version v0.96.1.
Krok 2: zdobyć klucz. Zarejestruj się na gate.joingonka.ai/register, potwierdź adres i utwórz klucz z prefiksem jg- w sekcji „Klucze API”. Jeden klucz i jedno saldo działają dla wszystkich modeli sieci.
Krok 3: uruchomić instalator.
npx @joingonka/setup --tool crushInstalator zapyta o klucz — nie przekazuje się go w argumentach wiersza poleceń, żeby nie zaległ w historii powłoki — i zrobi cztery rzeczy:
- wpisze dostawcę
joingonkado~/.config/crush/crush.json: typopenai-compat, adres bramy, klucz jawnie i trzy modele sieci z oknami kontekstu, limitami odpowiedzi i cenami za milion tokenów, które w momencie instalacji pobiera z bramy na żywo — na ich podstawie Crush liczy koszt sesji. Plik otrzyma uprawnienia600; - przypisze modele: w slocie large — DeepSeek V4 Flash, w small — MiniMax M2.7, a GLM-5.3 Flash pozostanie na liście do ręcznego wyboru. Robi to tylko wtedy, gdy slot large jest pusty lub wskazuje na nasz model, który zniknął z sieci; obcy wybór zostaje, a w wyniku pojawi się podpowiedź, jak się przełączyć;
- sprawdzi, że wybór zadziała: model z interfejsu Crush trzyma w pliku stanu, który nadpisuje konfigurację — o tym jest sekcja o large i small;
- zrobi kopię zapasową, pozostałych dostawców i ustawienia zostawi bez zmian i zakończy żywym zapytaniem do bramy, żeby od razu sprawdzić klucz, adres i model.
Inny model ustawia flaga --model ze skrótem deepseek, glm lub minimax; jawnie wskazany model jest zapisywany zawsze. Niestandardowe katalogi instalator uwzględnia tak samo jak sam Crush: CRUSH_GLOBAL_CONFIG dla konfiguracji, CRUSH_GLOBAL_DATA dla pliku stanu, a także XDG_CONFIG_HOME i XDG_DATA_HOME. Dla serwerów i skryptów jest tryb bez pytań, w którym klucz pobiera się ze zmiennej środowiskowej:
JOINGONKA_API_KEY=jg-your-key npx @joingonka/setup --tool crush --model glm --non-interactiveGłównym formatem Crush jest teraz crushrc, ale instalator pisze crush.json: rozumieją go wszystkie wersje. Jeśli masz już crushrc, Crush scali oba pliki, przy zgodnych kluczach wygra crushrc, a sam instalator go nie rusza.
Konfiguracja ręczna: crush.json lub crushrc
Wszystko, co robi instalator, można napisać ręcznie. Oto działający plik ~/.config/crush/crush.json — właśnie ten plik przepuściliśmy przez bramę:
{
"$schema": "https://charm.land/crush.json",
"providers": {
"joingonka": {
"name": "JoinGonka (Gonka)",
"type": "openai-compat",
"base_url": "https://gate.joingonka.ai/v1",
"api_key": "jg-your-key",
"models": [
{ "id": "deepseek-ai/DeepSeek-V4-Flash-0731", "name": "DeepSeek V4 Flash (Gonka)",
"context_window": 380000, "default_max_tokens": 32768,
"can_reason": true, "supports_attachments": false },
{ "id": "MiniMaxAI/MiniMax-M2.7", "name": "MiniMax M2.7 (Gonka)",
"context_window": 200000, "default_max_tokens": 8192,
"can_reason": false, "supports_attachments": false },
{ "id": "zai-org/GLM-5.3-Flash", "name": "GLM-5.3 Flash (Gonka)",
"context_window": 390000, "default_max_tokens": 8192,
"can_reason": true, "supports_attachments": false }
]
}
},
"models": {
"large": { "provider": "joingonka", "model": "deepseek-ai/DeepSeek-V4-Flash-0731" },
"small": { "provider": "joingonka", "model": "MiniMaxAI/MiniMax-M2.7" }
}
}| Pole | Wartość | Na co uważać |
|---|---|---|
type | openai-compat | Typ dla zewnętrznych usług z API zgodnym z OpenAI. Typ openai dokumentacja Crush zostawia dla zapytań kierowanych przez samo OpenAI |
base_url | https://gate.joingonka.ai/v1 | Z /v1 na końcu: ścieżkę /chat/completions Crush dopisuje sam |
api_key | twój klucz jg-… | Crush przepuszcza wartość przez podstawienie powłoki, więc zamiast klucza możesz wpisać $JOINGONKA_API_KEY — wtedy zmienna musi być wyeksportowana tam, skąd uruchamiasz Crush |
context_window | okno modelu | Na tej podstawie Crush pokazuje zapełnienie kontekstu i decyduje, kiedy kompresować historię |
default_max_tokens | limit odpowiedzi | Trafia do każdego zapytania jako max_tokens. W modelach rozumujących w ten budżet wlicza się też rozumowanie |
Crush przyjmuje wyłącznie ścisły JSON: komentarz albo wiszący przecinek — i nie wystartuje. Pola ceny (cost_per_1m_in, cost_per_1m_out i dwa pola dla cache) są potrzebne tylko licznikowi kosztów: instalator wpisuje tam aktualną cenę bramy, a bez nich Crush działa i pokazuje zero — jedynie edytor ze schematem z $schema podświetli je jako obowiązkowe.
Ten sam provider w formacie crushrc to zwykły Bash z wbudowanymi komendami Crush. Plik ~/.config/crush/crushrc:
provider add joingonka \
--name "JoinGonka (Gonka)" \
--type openai-compat \
--base-url "https://gate.joingonka.ai/v1" \
--api-key "${JOINGONKA_API_KEY:?set JOINGONKA_API_KEY}"
model add joingonka/deepseek-ai/DeepSeek-V4-Flash-0731 \
--name "DeepSeek V4 Flash (Gonka)" \
--context-window 380000 --default-max-tokens 32768 --can-reason true
model add joingonka/MiniMaxAI/MiniMax-M2.7 \
--name "MiniMax M2.7 (Gonka)" \
--context-window 200000 --default-max-tokens 8192
model add joingonka/zai-org/GLM-5.3-Flash \
--name "GLM-5.3 Flash (Gonka)" \
--context-window 390000 --default-max-tokens 8192 --can-reason true
model large joingonka/deepseek-ai/DeepSeek-V4-Flash-0731
model small joingonka/MiniMaxAI/MiniMax-M2.7Model podajemy tu w formie provider/model-id: do pierwszego ukośnika — nazwa providera, dalej — identyfikator sieci taki, jaki jest. Forma ${JOINGONKA_API_KEY:?…} trzyma klucz poza plikiem, ale bez wyeksportowanej zmiennej Crush nie wystartuje — lepiej błąd na starcie niż zapytania z pustym kluczem.
Modele large i small oraz plik stanu
Model w Crush wybierany jest nie jeden do wszystkiego, lecz dla dwóch slotów:
| Slot | Co jest na nim wykonywane | Co ustawia instalator | Jak zmienić |
|---|---|---|---|
large | Główny agent: wszystkie operacje z czytaniem i edycją plików oraz komendami | DeepSeek V4 Flash: okno 380K i największy w sieci limit odpowiedzi, 32768 | ctrl+l w interfejsie, -m w crush run, models.large w konfiguracji |
small | Zadania pomocnicze: nazwa sesji i pod-agent, który przeszukuje sieć i czyta strony internetowe. Jeśli mały model nie poradził sobie z nazwą, Crush powtarza zapytanie do dużego | MiniMax M2.7: posiada największą pojemność w sieci | --small-model w crush run, models.small w konfiguracji, model small w crushrc |
Trzeci model sieci, wnioskujący GLM-5.3 Flash, wybiera się do skomplikowanej logiki, pamiętając, że limit odpowiedzi wynosi 8192 i część z niego jest zużywana na rozumowanie — szczegóły w przeglądzie modelu. Na jedno uruchomienie model określa się pełną nazwą: crush run -m joingonka/zai-org/GLM-5.3-Flash "…". Wszystkie dostępne nazwy wypisuje crush models joingonka.
Plik stanu. Model wybrany w interfejsie za pomocą ctrl+l, Crush zapisuje nie w crush.json, lecz w maszynowym pliku stanu: ~/.local/share/crush/crush.json, w Windows — %LOCALAPPDATA%\crush\crush.json. Ten plik jest ważniejszy niż konfiguracja użytkownika i crushrc: Crush czyta je w kolejności /etc/crush/crush.json → ~/.config/crush/crush.json → ~/.config/crush/crushrc → plik stanu, przy czym każdy kolejny nadpisuje poprzedni. Wyżej stoją tylko ustawienia projektu — crush.json lub crushrc w jego katalogu. Gdzie znajdują się pliki na twojej maszynie, pokaże crush dirs.
W naszym przebiegu otworzyliśmy wybór modeli — dostawca „JoinGonka (Gonka)” znajduje się tam z oznaczeniem „✓ Configured” — i wybraliśmy MiniMax M2.7. Crush odpowiedział „Large model changed to MiniMax M2.7 (Gonka)” i zapisał w pliku stanu:
{"models":{"large":{"model":"MiniMaxAI/MiniMax-M2.7","provider":"joingonka","max_tokens":8192}}, …}Teraz ten model jest ważniejszy niż to, co zapisano w crush.json. Instalator rozpoznaje taką sytuację i zachowuje się różnie:
- bez
--modelpliku stanu nie dotyka — to twój roboczy wybór — ale wyraźnie ostrzega, z jakim modelem Crush faktycznie się otworzy:Heads-up: Crush will still start with joingonka/MiniMaxAI/MiniMax-M2.7, not joingonka/deepseek-ai/DeepSeek-V4-Flash-0731. Tak samo postąpi, jeśli w interfejsie wybrano GLM-5.3 Flash lub model innego dostawcy; - z jawnym
--modelpoprawia w pliku stanu dokładnie jeden wpis —models.large— po uprzednim zachowaniu kopii i pisze, co było i co się zmieniło. W przeciwnym razie flaga nie zadziałałaby po cichu. Po takim uruchomieniu Crush w naszym przebiegu otworzył się na modelu wskazanym we fladze.
Weryfikacja: co powinno się stać
Najpierw upewnij się, że Crush widzi providera:
crush models joingonkaW odpowiedzi dostaniesz trzy linie:
joingonka/MiniMaxAI/MiniMax-M2.7
joingonka/deepseek-ai/DeepSeek-V4-Flash-0731
joingonka/zai-org/GLM-5.3-FlashNastępnie jednorazowy przebieg bez interfejsu. Umieść w katalogu projektu plik z oczywistym błędem i poproś o jego znalezienie:
crush run -q "Read calc.py and tell me in one sentence whether it has a bug."Agent sam powinien wywołać narzędzie czytania pliku i odpowiedzieć konkretnie, z numerem linii. W naszym przebiegu błąd znalazły wszystkie trzy modele sieci, a zadanie zajęło 20-40 sekund. Flaga -q ukrywa wskaźnik oczekiwania. W trybie crush run wszystkie wywołania narzędzi są zatwierdzane automatycznie, więc uruchamiaj go we własnym projekcie. W zwykłym interfejsie (polecenie crush) aktywny model widać w linii stanu: ◇ DeepSeek V4 Flash (Gonka) via JoinGonka (Gonka). Sesje i dziennik Crush przechowuje w katalogu .crush projektu, odizolowanym od gita własnym .gitignore; dziennik wyświetla crush logs. Po stronie bramy żądanie jest widoczne w panelu: sekcja „Użycie”, podział „Według modeli” i „Według kluczy”.
Jeśli coś poszło nie tak, diagnozę zwykle można odczytać wprost z komunikatu:
| Co widać | Co to znaczy | Co zrobić |
|---|---|---|
unauthorized: Invalid API key. | Brama nie przyjęła klucza | Sprawdź api_key: klucz w całości, bez spacji. Jeśli wskazuje na zmienną, musi być wyeksportowana w tej powłoce |
invalid JSON in config file …/crush.json | W pliku jest komentarz, wiszący przecinek lub literówka | Crush przyjmuje tylko ścisły JSON: popraw plik. Instalator sam nie usuwa komentarzy, ale ostrzega o nich, a pliku, którego zupełnie nie da się sparsować, nie rusza i podaje przyczynę |
failed to load shell config …/crushrc: … exit status 1 | Błąd w crushrc, najczęściej niezdefiniowana zmienna z kluczem w formie ${…:?} | Wyeksportuj zmienną przed uruchomieniem lub popraw linię, na której skrypt się wywala |
Failed to override models: large model "…" not found | Literówka w nazwie modelu przy fladze -m | Skopiuj nazwę z wyniku crush models joingonka |
too many requests: Model "…" is currently overloaded in the Gonka network (rate limit) | Modelowi w godzinach szczytu skończyła się wolna przepustowość w sieci | Crush sam powtarza żądanie z rosnącymi pauzami — w naszym przebiegu około minuty — i dopiero potem się poddaje. Przełącz się na inny model przez ctrl+l lub -m albo poczekaj; stan widać na stronie statusu |
| Crush otworzył się na innym modelu niż ten, o którym poinformował instalator | Wybór z interfejsu leży w pliku stanu i nadpisuje konfig | Wybierz model przez ctrl+l lub powtórz instalację z --model |
402 | Na koncie skończyły się środki | Doładuj konto w sekcji „Rozliczenia”; klucz przy tym działa |
Ile to kosztuje
Agent zużywa tokeny inaczej niż czat: do każdej frazy Crush dodaje prompt systemowy i opisy swoich narzędzi, a zadanie zazwyczaj wymaga kilku kroków. W naszym teście każde zapytanie do modelu niosło około 11,5 tysiąca tokenów wejściowych, a zadanie „odczytaj plik i znajdź błąd” zajęło dwa-trzy zapytania i 23-35 tysięcy tokenów, z czego prawie wszystko to wejście. Dlatego cena za token ma tutaj kluczowe znaczenie.
Przez JoinGonka Gateway tokeny kosztują $0.0069 za milion na wejściu i $0.021 za milion na wyjściu — cena jest taka sama dla wszystkich modeli w sieci i jest pobierana na tej stronie ze źródła na żywo.
| Scenariusz | Zużycie | Przez Gateway |
|---|---|---|
| Zadanie jednorazowe: odczyt pliku, znalezienie błędu | 23-35K tokenów | setne części centa |
| Dzień aktywnej pracy | 3-7M tokenów | kilka centów |
| Miesiąc aktywnej pracy | ~150M tokenów | około dolara |
Szacunki w prawej kolumnie dotyczą cen z września 2026. Dla porównania — jak w ogóle można płacić za modele w Crush:
| Sposób | Model płatności | Co ogranicza |
|---|---|---|
| Hyper — oficjalny dostawca Charm | subskrypcja, dostępny darmowy plan | warunki taryfy po stronie Charm |
| Klucz dostawcy bezpośrednio | za tokeny według cennika dostawcy | rachunek rośnie wraz z długością sesji; cena zależy od modelu |
| JoinGonka Gateway | za tokeny, przedpłacone saldo | zużycie widać w panelu; brak subskrypcji i miesięcznych limitów |
Licznik kosztów w interfejsie Crush oblicza dane na podstawie pól ceny w pliku konfiguracyjnym. Trafia tam cena bramy w momencie instalacji, a dolarowa cena w sieci zmienia się wraz z kursem GNK, więc licznik jest tylko orientacyjny. Dokładne zużycie i pozostałe środki znajdują się w panelu, w sekcjach „Użycie” i „Billing”. Dlaczego w slocie large domyślnie ustawia się DeepSeek V4 Flash, zostało szczegółowo wyjaśnione w przeglądzie modelu.
O czym warto pamiętać podczas pracy
Uprawnienia. W interfejsie Crush domyślnie pyta o zgodę przed wywołaniem narzędzia. Flaga --yolo wyłącza wszystkie pytania naraz, a punktowo zaufane narzędzia wymienia się w konfigu:
# crushrc
permissions allow view ls grep
# crush.json
"permissions": { "allowed_tools": ["view", "ls", "grep"] }Przypominamy, że crush run zatwierdza wszystko sam. To właściwość Crush, nie zależy od dostawcy modelu.
Timeout żądania. Crush przerywa żądanie, jeśli od modelu długo nie przychodzi żaden fragment odpowiedzi: w wersji 0.96.1 to dwie minuty ciszy (dokumentacja podaje 60 sekund, ale w kodzie i w naszym teście — dwie minuty). Służbowe pingi, którymi brama podtrzymuje połączenie, nie zerują tego licznika — sprawdziliśmy na lokalnym stanowisku. Brama w godzinach szczytu czeka na pierwszy token z sieci do 150 sekund, więc warto zwiększyć zapas:
# crushrc
option request-timeout 300
# crush.json
"options": { "request_timeout": 300 }Podpisy w commitach. Commity i pull requesty tworzone przez Crush domyślnie otrzymują wiersz Assisted-by: Crush:<model> oraz dopisek „Generated with Crush”. Jeśli tego nie chcesz:
# crushrc
option attribution-trailer-style none
option attribution-generated-with false
# crush.json
"options": { "attribution": { "trailer_style": "none", "generated_with": false } }Metryki. Crush wysyła deweloperom pseudonimowe statystyki użycia — tylko metadane, bez promptów i odpowiedzi. Wyłącza się je zmienną CRUSH_DISABLE_METRICS=1 lub DO_NOT_TRACK=1. Brama ze swojej strony nie przechowuje treści promptów ani odpowiedzi — w statystykach zostają tylko agregaty zużycia.
Konfig to kod. I crushrc, i crush.json Crush wykonuje z uprawnieniami twojej powłoki: $(…) w polu klucza uruchomi się przy wczytywaniu, a projektowy crushrc zadziała, gdy tylko otworzysz Crush w tym katalogu. Nie uruchamiaj agenta w cudzym repozytorium, nie przeczytawszy jego konfigów.
npx @joingonka/setup --tool crush — lub bloku providers.joingonka w ~/.config/crush/crush.json: typ openai-compat, adres https://gate.joingonka.ai/v1, klucz jg-…, modele z rzetelnymi context_window i default_max_tokens. To samo zapisuje się kilkoma wierszami provider add oraz model add w crushrc. Slot large obsługują DeepSeek V4 Flash, small — MiniMax M2.7, a GLM-5.3 Flash — do skomplikowanej logiki. Główna pułapka to plik stanu: model wybrany za pomocą ctrl+l jest ważniejszy niż konfiguracja, dlatego instalator z jawnym --model poprawia również jego. Weryfikacja — crush models joingonka i crush run; limit czasu zapytania warto zwiększyć do 300 sekund.Chcesz wiedzieć więcej?
Zapoznaj się z innymi sekcjami lub zacznij zarabiać GNK już teraz.
Uzyskaj klucz i darmowe tokeny →