Większość modeli AI, z których korzystamy na co dzień, pisze tekst. Jev od TypeSafe AI robi coś innego: podejmuje decyzje. Dostaje zamknięte pytanie i odpowiada wyborem z listy, oceną w skali albo „tak/nie”, zawsze z prawdopodobieństwem. Nie wymyśli kategorii, której nie podałeś, a jedna odpowiedź kosztuje ułamek centa.
TypeSafe wstrzymał rejestracje kilka dni po premierze. Jev jest jednak dostępny przez OpenRouter – bez waitlisty. W tym poradniku:
- Utworzymy klucz API z limitem wydatków.
- Zadamy Jevowi pierwsze pytanie w terminalu.
- Podepniemy go do Claude Code jako skill i sprawdzimy, że agent sam z niego korzysta.
Czym Jev różni się od ChatGPT?
Jev to pierwszy model z rodziny, którą TypeSafe nazywa System One: szybkie, „odruchowe” decyzje zamiast długiego rozumowania. Obsługuje trzy typy pytań:
- choice – Pytanie: „Która z tych opcji?” (do 255 opcji) · Co zwraca: wybraną opcję, prawdopodobieństwo każdej opcji i
confidence - noul – Pytanie: „Czy ten warunek jest spełniony?” · Co zwraca: prawdopodobieństwo „tak” (0–1)
- score – Pytanie: „Gdzie na tej skali?” (do 10 poziomów) · Co zwraca: wynik na skali, rozkład i
confidence
W praktyce oznacza to trzy rzeczy:
- Odpowiedź zawsze mieści się w Twoim schemacie. Nie trzeba parsować tekstu ani łatać „prawie JSON-a”.
- Jest szybki i tani: ok. $0,042 za milion tokenów wejścia, a tokeny wyjścia są darmowe.
- Nie tłumaczy się. Nie dostaniesz uzasadnienia, tylko liczby. Do pisania i wyjaśniania dalej potrzebujesz zwykłego modelu językowego.
Dlaczego OpenRouter?
OpenRouter udostępnia oficjalny model typesafe/jev-1.13 każdemu, kto ma konto i klucz API. Nie potrzebujesz konta w TypeSafe.

Na stronie modelu widać najważniejsze parametry: $0,042 za milion tokenów wejścia, $0 za wyjście, 32 tys. tokenów kontekstu i datę wydania wersji 1.13 (18 września 2026). Jest tu też Playground z gotowymi przykładami każdego typu pytania (np. noul jako „strażnik” przed wywołaniem narzędzia przez agenta). Warto w nim kliknąć jeden przykład, zanim przejdziemy do terminala.
Uważaj na podróbki. Wokół Jeva powstało sporo stron o podobnych nazwach, które wydają własne klucze i przepuszczają zapytania przez nieznane serwery. Oficjalne źródła to typesafe.ai i strona modelu na openrouter.ai. Nigdzie indziej nie podawaj karty ani kluczy.
Czego potrzebujesz
- Konta na openrouter.ai z doładowanymi kredytami. Jev jest płatny (choć bardzo tani), więc bez środków na koncie API odpowie błędem
402. Doładujesz je w Settings → Credits. Na testy z tego artykułu wystarczy najmniejsza kwota. - macOS z terminalem i Pythonem 3 (
python3 --version; jeśli go nie ma:xcode-select --install). - Opcjonalnie Claude Code do kroku 5.
KROK 1: Klucz API z limitem
W OpenRouter wejdź w Keys → Create Key i wypełnij formularz:
- Name: np.
jev-blog-test. Po nazwie rozpoznasz klucz w statystykach. - Expiration: np. 90 dni. Klucz testowy sam wygaśnie, jeśli o nim zapomnisz.
- Credit limit: Custom amount, np. $2, z resetem Daily. OpenRouter odrzuci zapytania, gdy klucz wyda $2 w ciągu doby (limit odnawia się o północy UTC). Przy cenie Jeva to tysiące zapytań dziennie, a w razie wycieku klucza strata jest z góry ograniczona.

Kliknij Create. OpenRouter pokaże nowy klucz (zaczyna się od sk-or-v1-) tylko ten jeden raz. Skopiuj go od razu – w następnym kroku schowamy go w bezpiecznym miejscu.

Wskazówka. Wolisz twardy limit na cały okres ważności klucza zamiast dziennego? Ustaw w Reset limit every… brak resetu. Wtedy $2 to maksimum na całe 90 dni.
KROK 2: Klucz w pęku kluczy macOS
Zamiast trzymać klucz jawnym tekstem w pliku konfiguracyjnym, zapiszmy go w Keychain:
Terminal poprosi o hasło – wklej klucz. Teraz niech każdy nowy terminal odczytuje go do zmiennej OPENROUTER_API_KEY:

Wkleiłeś coś innego niż klucz? Nadpisz wpis w Keychain (flaga -U aktualizuje istniejący) i przeładuj konfigurację:KROK 3: Pierwsze pytanie do Jeva (curl)
Jev na OpenRouter nie korzysta z endpointu czatu. Ma osobne Decisions API: POST https://openrouter.ai/api/alpha/decisions. Wysyłasz dwie rzeczy:
state– kontekst, czyli fakty potrzebne do decyzji,questions– słownik pytań, każde z typem, instrukcją i kryteriami.
Przykładowy projekt: czy warto napisać ten artykuł?
Żeby test miał sens, weźmy realny problem. Prowadzę bloga o SEO i AI i mam dziesiątki pomysłów na wpisy. Zanim zabiorę się za jeden z nich – „robots.txt w 2026 – jak skonfigurować dla GPTBot i ClaudeBot” – chcę szybko wiedzieć trzy rzeczy:
- Jaką intencję ma czytelnik, który tego szuka? Od tego zależy format wpisu: definicja, poradnik czy porównanie.
- Czy temat w ogóle pasuje do bloga?
- Jak bardzo jest zaawansowany? Czy piszę dla początkujących, czy dla specjalistów.
Każde z tych pytań to inny typ decyzji Jeva: wybór z listy (choice), tak/nie (noul) i ocena w skali (score). Cały „projekt” to jeden folder z jednym plikiem JSON:
Utwórz folder i plik:
Wklej do pliku poniższą treść i zapisz (w nano: Ctrl+O, Enter, Ctrl+X). Jeśli wolisz obejść się bez edytora, zobacz wskazówkę pod kodem.
Bez edytora. Plik możesz też utworzyć jednym poleceniem: wpiszcat > przyklad-seo.json <<'EOF', w kolejnych liniach wklej JSON, a na końcu w osobnej linii wpiszEOF. Jeśli curl zgłosioption -d: error encountered when reading a file, to znaczy, że pliku nie ma w bieżącym folderze – sprawdź to przezls.
Co jest czym w tym pliku:
- model – Co zawiera:
typesafe/jev-1.13· Po co: który model ma odpowiedzieć - state.blog – Co zawiera: opis profilu bloga · Po co: punkt odniesienia dla pytania „czy pasuje?”
- state.tytul – Co zawiera: oceniany temat · Po co: to, o czym Jev podejmuje decyzję
- questions.intencja – Co zawiera:
choicez 4 opcjami · Po co: każda opcja ma klucz (poradnik) i opis, po którym Jev ją rozpoznaje - questions.pasuje_do_bloga – Co zawiera:
noulz opisem „tak” i „nie” · Po co: zwraca prawdopodobieństwo odpowiedzi „tak” - questions.trudnosc – Co zawiera:
scorez 4 poziomami · Po co: poziomy od najniższego (0) do najwyższego (3)
Wskazówka. Nazwy pytań i kluczy opcji wymyślasz sam – Jev zwróci odpowiedź pod tymi samymi nazwami. Najważniejsze są opisy w criteria: im wyraźniej odróżniają opcje, tym pewniejsza odpowiedź.Wysyłamy. Flaga -w dopisze na końcu kod HTTP, żeby od razu było widać, czy zapytanie przeszło:

HTTP 200 oznacza, że wszystko działa. Tak wygląda moja odpowiedź, sformatowana dla czytelności:
(pole legend z opisami poziomów pominąłem)
Co z tego wynika:
- Intencja: poradnik, pewność 1. Jev nie ma żadnych wątpliwości, że ktoś szukający konfiguracji robots.txt chce instrukcji krok po kroku, a nie definicji.
- Pasuje do bloga: 0,95. Prawdopodobieństwo odpowiedzi „tak” wynosi 95%.
- Trudność: 2,47, ale pewność tylko 0,47. To najciekawszy wynik. Jev rozłożył głosy niemal po równo między „średniozaawansowanych” (0,48) i „zaawansowanych specjalistów” (0,49). Niska
confidenceto sygnał, że sam temat leży na granicy, a nie że model „nie wie”. W praktyce: piszę dla średniozaawansowanych i dodaję sekcję dla ekspertów. - Koszt: $0,000025 za 597 tokenów wejścia i trzy decyzje. Za dolara to około 40 tysięcy takich zapytań.
Czytelniejszy wynik. Zamiast-w "..."dodaj na końcu| python3 -m json.tool --no-ensure-ascii, a odpowiedź zostanie sformatowana w kolumnie. Flaga--no-ensure-asciisprawia, że polskie znaki nie zamieniają się w kody typuł.
Na co patrzeć w odpowiedzi:
choiceto zawsze jeden z kluczy podanych wcriteria.confidencemówi, jak bardzo Jev jest pewny swojej odpowiedzi. W automatyzacjach to najważniejsza liczba.usage.costto realny koszt zapytania w dolarach.
KROK 4: Czytelny wynik – skrypt jev.py
Surowy JSON jest dobry do debugowania, ale na co dzień wygodniej mieć krótkie podsumowanie. Napisałem do tego mały skrypt jev.py: ok. 90 linii, tylko biblioteka standardowa Pythona, bez instalowania paczek. Zapisz go w tym samym folderze co przyklad-seo.json (pełny kod poniżej) i uruchom:

Całe zapytanie – połączenie z OpenRouter, trzy decyzje i powrót – trwało 560 ms.
Zwróć uwagę, że wyniki minimalnie różnią się od poprzedniego testu z curl: dopasowanie 0,94 zamiast 0,95, trudność 2,45 zamiast 2,47. Jev jest modelem probabilistycznym, więc takie drobne wahania są normalne. Decyzje z pewnością bliską 1 (jak intencja) są stabilne, a te na granicy (jak trudność) mogą się między wywołaniami lekko przesuwać. To kolejny powód, żeby w automatyzacjach opierać się na progu pewności, a nie na samej odpowiedzi.
Skrypt przyjmuje też zapytanie ze standardowego wejścia (cat zapytanie.json | python3 jev.py -), a flaga --raw pokazuje pełną odpowiedź JSON. To przyda się za chwilę w Claude Code.
Pełny kod jev.py
KROK 5: Jev w Claude Code
Claude Code świetnie pisze i analizuje, ale do setek powtarzalnych klasyfikacji szkoda dużego modelu. Damy mu więc Jeva jako narzędzie w formie skilla, czyli folderu z instrukcją (SKILL.md) i skryptem. Claude Code sam po niego sięgnie, gdy zadanie będzie tego wymagało.
Istnieje kilka społecznościowych serwerów MCP dla Jeva, ale każdy z nich dostaje Twój klucz API. Tutaj wystarczą dwa pliki, które przeczytasz w minutę.
Instalacja skilla (dla wszystkich projektów):

SKILL.md mówi Claude Code, kiedy używać Jeva (klasyfikacja, tak/nie, ocena w skali), jak zbudować zapytanie i jakich zasad pilnować, np. żeby nigdy nie wysyłać sekretów w state. Pełna treść:
Zapisz ją w folderze projektu jako claude-skill/jev/SKILL.md. Cały projekt wygląda teraz tak:
Uruchom Claude Code z tego samego terminala, żeby widział zmienną OPENROUTER_API_KEY:
Prompt testowy:
Claude Code rozpoznaje zadanie i sam wczytuje skill (Skill(jev) – Successfully loaded skill). Potem buduje pięć zapytań – po jednym na tytuł – i uruchamia je równolegle przez jev.py:

Uwaga. U mnie działał tryb auto, więc Claude Code nie pytał o zgodę. W domyślnym trybie poprosi o zatwierdzenie polecenia python3 ~/.claude/skills/jev/jev.py – zatwierdź je.Po niespełna minucie dostajemy tabelę:

- 1 – Tytuł: Google Tag Manager: praktyczny poradnik krok po kroku · Intencja (pewność): poradnik (1,00) · Pasuje do bloga (P): ⚠️ raczej nie (0,53) · Trudność 1–4 (pewność): ⚠️ 1,86 → 2 (0,56)
- 2 – Tytuł: Ahrefs: przewodnik po narzędziu dla początkujących · Intencja (pewność): poradnik (0,97) · Pasuje do bloga (P): nie (0,63) · Trudność 1–4 (pewność): 1,06 → 1 (0,94)
- 3 – Tytuł: Voice search: wyszukiwanie głosowe a pozycjonowanie · Intencja (pewność): informacyjna (0,92) · Pasuje do bloga (P): tak (0,78) · Trudność 1–4 (pewność): 2,84 → 3 (0,65)
- 4 – Tytuł: Favicon: wizytówka strony w SERP i przeglądarce · Intencja (pewność): informacyjna (0,99) · Pasuje do bloga (P): ⚠️ raczej tak (0,55) · Trudność 1–4 (pewność): ⚠️ 1,48 → 1–2 (0,52)
- 5 – Tytuł: Pozycjonowanie WordPress: kompletny poradnik SEO · Intencja (pewność): poradnik (1,00) · Pasuje do bloga (P): ⚠️ raczej tak (0,53) · Trudność 1–4 (pewność): ⚠️ 2,39 → 2–3 (0,37)
⚠️ – pewność poniżej 0,6. Łączny koszt pięciu ocen: $0,000151, czyli ok. $0,00003 za tytuł.
Co z tego wynika:
- Intencja jest pewna we wszystkich przypadkach (0,92–1,00). Tytuł z „poradnikiem” czy „krok po kroku” Jev bez wahania klasyfikuje jako poradnik, a „co to jest”-owe tematy (voice search, favicon) jako informacyjne.
- Dopasowanie do bloga to najciekawsza kolumna. Jedynie Voice search pasuje z wyraźną pewnością, a Ahrefs raczej odpada. Trzy tematy wypadły niemal 50/50. Jev nie „zgaduje” – mówi wprost, że profil bloga opisany jednym zdaniem nie wystarcza do decyzji. Dla mnie to podpowiedź: albo doprecyzować
state.blog, albo przesunąć kąt tematu pod dewelopera, np. „GTM server-side”, „favicon i manifest w Next.js”, „WordPress: techniczne SEO w motywie”. - Trudność WordPressa (pewność 0,37) to znowu temat „na granicy”: Jev waha się między poziomem 2 (43%) i 3 (38%), bo „kompletny poradnik” może być i dla średniozaawansowanych, i dla ekspertów.
- Claude Code sam przeliczył skalę. API zwraca poziomy od 0 do 3, a Claude przesunął je na skalę 1–4 z promptu i oznaczył niepewne wyniki. To dobry przykład podziału pracy.
Podział ról jest prosty: Claude rozumie zadanie i układa pytania, Jev tanio i szybko podejmuje decyzje, a Claude zbiera wynik i go tłumaczy.
Ile to kosztowało?
Każde wywołanie zwraca usage.cost, a pełną historię widać w panelu OpenRouter w Logs → Generations. Warto dodać filtr API Key is jev-blog-test, żeby widzieć tylko wywołania z testowego klucza:

Cały test z tego artykułu to 8 zapytań do Jeva:
- curl (dwa uruchomienia) – Zapytania: 2 · Tokeny wejścia: 597 · Koszt: 2 × $0,0000251
- jev.py – Zapytania: 1 · Tokeny wejścia: 597 · Koszt: $0,0000251
- Claude Code (5 tytułów) – Zapytania: 5 · Tokeny wejścia: 718–723 · Koszt: 5 × ok. $0,0000303
- Razem – Zapytania: 8 · Koszt: ok. $0,00023
Mniej niż jedna czterdziesta centa za cały artykuł. Za dolara to ok. 35 tysięcy takich decyzji.
Dla porównania: licznik sesji Claude Code (Opus) w trakcie jednego zadania z tabelą wzrósł z $0,22 do $0,28. Najdroższe nie są decyzje Jeva, tylko praca modelu, który je organizuje. Dlatego do masowych ocen – setek czy tysięcy elementów – lepiej uruchamiać jev.py bezpośrednio w skrypcie, a Claude Code zostawić do budowania pytań i interpretacji wyników. Właśnie tak zrobimy w części 2.
Ograniczenia
- Tylko pytania zamknięte. Jev nie napisze ani nie streści tekstu.
- Brak uzasadnień. Jeśli potrzebujesz „dlaczego”, dopytaj zwykły model.
- Limit 32 tys. tokenów kontekstu, do 255 opcji w
choicei do 10 poziomów wscore. - Decisions API ma status „alpha”. Format może się jeszcze zmienić – śledź dokumentację OpenRouter.
- Dane trafiają do dostawcy. Nie wysyłaj danych klientów ani treści objętych NDA.
Podsumowanie
W kwadrans masz działającego Jeva: klucz z limitem w pęku kluczy, test w terminalu i skill, dzięki któremu Claude Code sam deleguje mu powtarzalne decyzje. Koszt testu jest pomijalny, a odpowiedzi zawsze mieszczą się w schemacie, który sam ustalasz.
W następnej części: Jev ocenia mój backlog ponad 100 pomysłów na artykuły w Obsidianie – wykrywa kanibalizację z opublikowanymi wpisami i układa kolejkę „co pisać najpierw”.
Źródła
- TypeSafe AI – Introducing System One Models & Jev
- OpenRouter – Jev 1.13
- OpenRouter – dokumentacja Jev
- OpenRouter – Decisions API reference
- Flavio Copes – How to get access to Jev
Często zadawane pytania (FAQ)
Nie. Przez OpenRouter wystarczy konto OpenRouter z doładowanymi kredytami i klucz API. Model ma identyfikator typesafe/jev-1.13 i jest dostępny bez listy oczekujących.
Jev kosztuje $0,042 za milion tokenów wejścia, a tokeny wyjścia są darmowe. W moim teście jedno zapytanie z trzema pytaniami (ok. 600–720 tokenów) kosztowało od $0,000025 do $0,00003, a cały test z 8 zapytaniami – ok. $0,00023.
Jev nie generuje tekstu. Odpowiada wyłącznie na pytania zamknięte: wybór z listy (choice), tak/nie (noul) lub ocena w skali (score), zawsze z prawdopodobieństwem. Odpowiedź nigdy nie wychodzi poza zdefiniowany schemat, ale Jev nie podaje też uzasadnień.
Tak. Wystarczy skill w folderze ~/.claude/skills/jev: plik SKILL.md z instrukcją i krótki skrypt jev.py. Claude Code musi być uruchomiony z terminala, w którym ustawiona jest zmienna OPENROUTER_API_KEY.
Sprawdzę indeksację, robots.txt i renderowanie - dostaniesz listę konkretów do naprawy.




