Powrót do bloga

Narzędzia i integracjePrzewodnik

Połącz Crush z CheapTokens: dostawca, model i klucz w crushrc

Dodaj CheapTokens do Crush za pomocą dwóch komend crushrc: dostawcy completions i modelu z rzeczywistymi limitami; klucz pochodzi ze zmiennej środowiskowej.

Autor: CheapTokens TeamOpublikowano 5 min czytania

Plik konfiguracyjny Crush z liniami dostawcy i modelu CheapTokens
Na tej stronie
  1. Zainstaluj Crush
  2. Dodaj CheapTokens do crushrc
  3. Otwórz Crush i uruchom pierwsze zadanie
  4. Ile kosztuje sesja kodowania
  5. Jeśli nie działa

Aby połączyć Crush z CheapTokens, umieść dwie komendy w swoim crushrc: provider add z bazowym URL https://api.cheaptokens.dev/v1 oraz --type completions, a także model add z pełnym identyfikatorem modelu. Następnie otwórz Crush, naciśnij Ctrl+l, wybierz model i zleć mu zadanie. Klucz pozostaje w zmiennej środowiskowej, a nie w pliku.

Jeśli korzystałeś ze starszego przewodnika, prawdopodobnie edytuje on crush.json. Crush nadal odczytuje ten plik, ale jego README nazywa go przestarzałym: obecna konfiguracja to crushrc, a od wersji v0.99.0 (29 października 2026) dostawca --type opisuje format API, a nie dostawcę. Źródłami są README Crush oraz informacje o wydaniach, sprawdzone 10 listopada 2026; najnowsze stabilne wydanie na ten dzień to v0.100.0.

Zainstaluj Crush#

Wybierz menedżer pakietów, który już masz. Crush to jeden plik binarny, więc nie ma znaczenia, którą drogę wybierzesz.

Zainstaluj Crush

Homebrew

bash
brew install charmbracelet/tap/crush

npm

bash
npm install -g @charmland/crush

winget

bash
winget install charmbracelet.crush

Go

bash
go install github.com/charmbracelet/crush@latest

README wymienia także repozytoria apt i yum, Scoop, Nix, Arch i FreeBSD. Uruchom raz crush, aby sprawdzić, czy się uruchamia, a następnie wyjdź.

Dodaj CheapTokens do crushrc#

README opisuje crushrc jako "po prostu Bash z kilkoma wbudowanymi funkcjami specyficznymi dla Crush". Na tym polega cały trik: piszesz shell, a provider add i model add to komendy, które Crush rozumie. Crush szuka pliku w tej kolejności: ./.crushrc, ./crushrc, a następnie ~/.config/crush/crushrc.

Więc sam wybierasz, gdzie będzie się znajdować. Lokalny dla projektu .crushrc dotyczy jednego repozytorium; ten w ~/.config/crush/ dotyczy wszędzie. Na pierwszy raz łatwiejszy jest globalny.

Najpierw umieść klucz w swoim shellu. Utwórz go w panelu CheapTokens i wyeksportuj (wartość poniżej to placeholder):

bash
export CHEAPTOKENS_API_KEY="your-key-here"

Następnie otwórz ~/.config/crush/crushrc i wpisz:

bash
provider add cheaptokens --type completions \
  --base-url "https://api.cheaptokens.dev/v1" \
  --api-key "$CHEAPTOKENS_API_KEY"

model add cheaptokens/deepseek-ai/DeepSeek-V4-Flash-0731 \
  --name "DeepSeek-V4-Flash" \
  --context-window 380000 \
  --default-max-tokens 32768

Kilka szczegółów wartych drugiego spojrzenia:

  • --type completions to nazwa Crush dla dostawców zgodnych z OpenAI, którzy nie są samym OpenAI. responses służy do proxy OpenAI, messages do tych zgodnych z Anthropic. Stary openai-compat nadal działa i jest migrowany.
  • Bazowy URL kończy się na /v1. To adres CheapTokens dla Chat Completions w stylu OpenAI; pełna lista endpointów znajduje się w dokumentacji CheapTokens.
  • $CHEAPTOKENS_API_KEY jest rozwijany przez shell, więc plik nie zawiera sekretu, a projektowy .crushrc można bezpiecznie umieścić w gicie.
  • Identyfikator modelu jest pełny, deepseek-ai/DeepSeek-V4-Flash-0731. Krótki identyfikator, taki jak deepseek-v4-flash, jest odrzucany przez API. Po nazwie dostawcy następuje drugi ukośnik, ponieważ sam identyfikator go zawiera.
  • --context-window 380000 to zaokrąglone 380K DeepSeek-V4-Flash, a --default-max-tokens 32768 to jego limit na odpowiedź. To rzeczywiste limity modelu w CheapTokens: kontekst 380K i do 32 768 tokenów na odpowiedź. Umieść je w model add zamiast pozostawiać przykładowe wartości z README (64000 i 5000).
Plik crushrc z dostawcą i modelem CheapTokens
crushrc: jedna linia dostawcy i jedna linia modelu; klucz pochodzi ze środowiska

README pokazuje model add tylko z prostym identyfikatorem (deepseek/deepseek-chat). Twój identyfikator ma dodatkowy ukośnik, więc wybór modelu w następnym kroku jest prawdziwym sprawdzianem: jeśli model pojawi się w grupie cheaptokens, linia została odczytana zgodnie z zamierzeniem.

Chcesz inny model na tym samym saldzie? Dodaj jeszcze jedną linię model add z własnym identyfikatorem i limitami. GLM-5.3-Flash to zai-org/GLM-5.3-Flash (kontekst 390K, do 8 192 tokenów na odpowiedź), a MiniMax-M2.7 to MiniMaxAI/MiniMax-M2.7 (kontekst 180K, do 8 192 tokenów na odpowiedź). Utrzymuj --default-max-tokens na poziomie równym lub niższym niż limit odpowiedzi dodawanego modelu.

Otwórz Crush i uruchom pierwsze zadanie#

Uruchom crush w folderze projektu. Naciśnij Ctrl+l, aby otworzyć wybór modelu, i wybierz DeepSeek-V4-Flash z grupy cheaptokens. README nie opisuje komendy crushrc dla domyślnego modelu, więc wybór modelu to jedyna droga.

Od crushrc do pierwszej odpowiedzi: dostawca, model, wybór, zadanie
Droga od konfiguracji do pierwszej odpowiedzi

Teraz zleć coś małego i sprawdzalnego, na przykład: Read this repo and tell me which file starts the app, in two lines. Odpowiedź, która wymienia istniejący plik, oznacza, że cały łańcuch działa: klucz, bazowy URL, identyfikator modelu.

Spróbuj samSpróbuj: naciskasz Ctrl+l, a modelu nie ma na liście. Co sprawdzasz najpierw?Pokaż odpowiedź

Lokalizację pliku i zmienną. Crush szuka konfiguracji według priorytetu: ./.crushrc, ./crushrc, ~/.config/crush/crushrc. Sprawdź, czy projekt nie ma innego .crushrc lub crushrc o innej zawartości oraz czy dostawca został dodany w pliku, który edytowałeś. A echo $CHEAPTOKENS_API_KEY musi wypisać klucz w tym samym shellu, w którym uruchamiasz crush.

Monity o uprawnienia są tam celowo. permissions allow <tools> w crushrc pozwala nazwanym narzędziom działać bez pytania; --yolo pomija każdy monit, a samo README mówi, by zachować przy nim dużą ostrożność.

Ile kosztuje sesja kodowania#

Krok agenta w terminalu jest obciążony wejściem: Crush za każdym razem wysyła historię, zawartość plików i wyjście narzędzi, a otrzymuje skromną odpowiedź. Załóżmy, że przeciętny krok wysyła 30 000 tokenów i otrzymuje 2 000. Na DeepSeek-V4-Flash ten krok kosztuje $0.00065, a cena jest taka sama o każdej porze, bez godzin szczytu. Licząc wejście i wyjście razem, jest to taniej niż cena referencyjna OpenRouter.

Podstaw własne liczby: sesja 40 takich kroków to jedno przesunięcie suwaka.

Kalkulator kosztów

Jeden dzień agenta kodującego w Crush

Tokeny wejściowe na żądanie: 30 000 · Tokeny wyjściowe na żądanie: 2000 · Żądania dziennie: 40

ModelDziennieMiesięcznie
GLM-5.3-Flash$0.0272$0.816
DeepSeek-V4-Flash$0.026$0.78
MiniMax-M2.7$0.072$2.16

Wejście na krok rośnie w miarę trwania sesji, więc długą sesję sprawdzaj względem okna 380K, a nie średniej. Aktualne ceny za token dla każdego modelu są na stronie cenowej.

Jeśli nie działa#

Crush zapisuje log w twoim projekcie, ./.crush/logs/crush.log. Przeczytaj go, zanim zaczniesz zgadywać:

bash
crush logs --tail 500
crush logs --follow
crush --debug

Możesz też umieścić option debug true w crushrc, aby utrzymać wyjście debugowania. Następnie dopasuj to, co widzisz, do statusu HTTP zwróconego przez API:

  • 401: klucz został wysłany, ale nie został rozpoznany: literówka lub zastąpiony klucz. Utwórz go lub skopiuj ponownie.
  • 402: saldo lub limit klucza został wyczerpany. Żądanie bez klucza wygląda tak samo, więc uruchom echo $CHEAPTOKENS_API_KEY w shellu, w którym uruchamiasz crush. Jeśli klucz tam jest, doładuj saldo.
  • 429: zbyt wiele żądań w krótkim czasie. Poczekaj na wartość Retry-After i spróbuj ponownie.
  • 400 lub "model not found": sprawdź identyfikator modelu. Musi to być pełny identyfikator z dokumentacji, z prefiksem dostawcy.

Jeśli przeniosłeś się z crush.json, pamiętaj, że ~/.local/share/crush/crush.json to stan Crush, a nie konfiguracja; nie edytuj go ręcznie.

Aby uzyskać tę samą konfigurację w innych narzędziach, zobacz Połącz Aider z CheapTokens i Połącz Kilo Code z CheapTokens. Strona modelu taniego DeepSeek zawiera limity użytego tutaj modelu.