Qwen Code, Codex, Claude Code czy OpenCode?
Ten sam lokalny Qwen dał różne wyniki w czterech klientach do pracy z agentem. Porównujemy zadania, czas, ukryte testy i jakość zmian.
Syntalith
Na domowym PC z RTX 3090 uruchomiliśmy ten sam model Qwen3.8-27B przez Qwen Code, Codex, Claude Code i OpenCode. Każdy klient przekazuje instrukcje, udostępnia narzędzia i zarządza historią po swojemu, więc model przygotował w każdym środowisku inną zmianę. W długiej naprawie Go Qwen Code skończył po 8:22. Codex potrzebował 19:10 i zostawił błąd w zachowaniu awaryjnym. Claude Code przygotował poprawny wariant w 28:52. W małym imporcie CSV najszybszy poprawny wynik uzyskał OpenCode. Codex wystawił oceny na podstawie testów i kryteriów Syntalith.
Porównujemy tu harnessy, czyli programy, które zamieniają model w agenta programistycznego. Model i jego wagi pozostały te same. To zestawienie nie porównuje lokalnego Qwena z hostowanymi modelami OpenAI ani Anthropic.
W tym tekście Qwen Code oznacza oficjalnego klienta terminalowego. Nazwa nie oznacza osobnego modelu „Qwen Coder”. Każdy wynik pochodzi z jednego przebiegu na domowym sprzęcie, więc służy do wyboru kolejnych prób i nie określa powtarzalności.
Podany czas to łączny czas od uruchomienia do końca danego przebiegu. Wartości k/n przy zadaniach CSV oznaczają liczbę wspólnych ukrytych kontroli zaliczonych z ich łącznej liczby. Wynik 100/100 jest sumą punktów z arkusza kryteriów Syntalith; ta skala opisuje ocenę przebiegu, a procent poprawnych odpowiedzi raportujemy osobno przy testach. Codex oceniał zapisane przebiegi wykonane z Qwenem: 40 punktów za poprawność, 20 za testy regresyjne, 15 za kompatybilność, 10 za zakres zmiany, 10 za weryfikację i 5 za dokumentację.
Jedno zadanie, trzy różne poprawki
Długi test dotyczył problemu spotykanego w większym repozytorium Go. Polecenie wskazywało dwa miejsca, które ignorowały błąd json.Marshal, i wymagało:
- zachowania istniejącego formatu dla poprawnych wartości;
- bezpiecznego, deterministycznego zachowania awaryjnego;
- testów zwykłego i błędnego wejścia;
- kompilacji, właściwych testów oraz kontroli repozytorium;
- aktualizacji istniejącej dokumentacji;
- braku porządkowania niezwiązanych błędów.
Wszystkie trzy programy dostały to samo polecenie i ten sam commit, każdy w osobnej kopii repozytorium. Korzystały z Qwen3.8-27B na tym samym zamrożonym, zewnętrznie zmodyfikowanym stosie vLLM, z deklarowanym oknem 150 000 tokenów kontekstu i średnim poziomem rozumowania.
| Klient | Łączny czas od uruchomienia do końca | Skrócenia historii rozmowy | Ocena i rezultat |
|---|---|---|---|
| Qwen Code | 8:22 | 0 | 100/100, przyjęty |
| Codex | 19:10 | 1 | 87/100, odrzucony za istotny błąd zachowania awaryjnego |
| Claude Code | 28:52 | 0 | 98/100, przyjęty, z trudnościami w weryfikacji |
Każda ocena w tabeli dotyczy tego konkretnego zapisanego przebiegu i wynika z tego samego arkusza kryteriów Syntalith. Codex przyznał punkty na podstawie odnotowanych testów i kontroli wykonanych po pracy Qwena; 100/100 oznacza zaliczenie obu testów ukierunkowanych, kompilacji całego projektu, sprawdzenia zmian w Git oraz pozostałych kryteriów arkusza. Wynik nie mówi nic o powtarzalności.
OpenCode nie występuje w tej tabeli, ponieważ nie ma zapisanego przebiegu długiej poprawki. Pojawia się niżej przy trzech zadaniach, które faktycznie uruchomiliśmy.
Co dokładnie zrobił Qwen Code
Qwen Code wykorzystał istniejący helper repozytorium do metadanych aktywności. Dla wartości, której nie da się zakodować w JSON, helper zwracał pustą wartość, a pole z oznaczeniem omitempty znikało z odpowiedzi. Dla tekstu webhooka agent dodał stały znacznik (unavailable).
To rozwiązanie miało dwie ważne cechy:
- zwykłe, poprawne wartości zachowywały dotychczasowy format;
- błąd kodowania nie tworzył częściowego JSON ani wyniku zależnego od uruchomienia.
Agent dodał po jednym zestawie testów do obu ścieżek, zaktualizował trzy właściwe dokumenty i odróżnił nowe wyniki od błędów obecnych już w bazowej wersji kodu. Codex sprawdził zapisany przebieg według arkusza kryteriów Syntalith: przyznał 100/100, ponieważ oba testy ukierunkowane, kompilacja, sprawdzenie zmian w Git i pozostałe kryteria wypadły pomyślnie. To ocena jednego przebiegu wykonana przez Codex, bez zewnętrznego audytora.
Dlaczego wariant Codex odpadł
Codex postanowił zachować klucze metadanych i po błędzie formatować każdą wartość za pomocą %v. Dla prostych skalarów wyglądało to dobrze. Dla niepustego kanału albo wskaźnika Go format wypisuje jednak adres pamięci, na przykład wartość w rodzaju 0xc00001c1c0. Adres zmienia się między uruchomieniami.
Testy Codex obejmowały łatwe wartości i pusty kanał, więc przeszły. Dokumentacja powtórzyła twierdzenie, że zachowanie awaryjne jest deterministyczne. Dopiero osobny test właściwości ujawnił sprzeczność. Za ten zapisany przebieg Codex przyznał 87/100 w arkuszu kryteriów, ponieważ test właściwości wykazał błąd w wymaganym zachowaniu awaryjnym.
To praktyczna różnica między zielonym zestawem testów a sprawdzeniem obietnicy zapisanej w opisie. Kod się budował, a większość pracy była sensowna. Zmiany jednak nie przyjęliśmy.
Co wybrał Claude Code
Claude Code użył lokalnego Qwena i rozdzielił zachowanie awaryjne według odbiorcy. Dla obiektu metadanych zwracał pusty obiekt JSON. Dla tekstu webhooka użył istniejącego znacznika (not available). Dodał sześć testów i cztery aktualizacje dokumentacji.
Implementacja przeszła kontrole i dostała 98/100 w tym samym arkuszu kryteriów, ocenionym przez Codex na podstawie zapisanego przebiegu. Łączny czas od uruchomienia do końca na jednej 3090 wyniósł 28:52, wobec 8:22 w Qwen Code. Podczas weryfikacji agent kilka razy pomylił ścieżki i sposób uciekania znaków w wyrażeniach regularnych.
Jest też ważna granica wsparcia: Anthropic nie wspiera kierowania Claude Code do modeli innych niż Claude. Nasz wynik dotyczy konkretnego emulatora interfejsu sieciowego i jednej wersji klienta. Nie rekomendujemy tej ścieżki jako firmowego standardu.
OpenCode pojawia się w małych zadaniach
OpenCode nie ma wyniku dla długiej poprawki JSON. Uruchomiliśmy go za to w trzech krótszych zadaniach. Każdy harness dostał takie samo zgłoszenie napisane językiem codziennej pracy i świeżą kopię małego projektu.
Pierwsze polecenie brzmiał:
Customers with several tags are showing up more than once in our CSV order export. Can you fix it? The export code is under src. Please keep the existing columns and add a regression test.
README zawierał dodatkowo kontrakt separatora, którego polecenie nie powtarzało. Wspólne ukryte kontrole sprawdzały, czy agent uwzględnił tę dokumentację.
| Zadanie | Qwen Code medium | Codex medium | OpenCode medium |
|---|---|---|---|
| eksport CSV | 3/3 ukryte, 38,24 s | 3/3, 113,34 s | 1/3, 32,69 s |
| paginacja | 3/3, 264,53 s, najmniejsza zgodna poprawka | 3/3, 474,91 s, zbyt szeroka zmiana kontraktu | 3/3, 325,88 s, minimalny kod, potem zbędna praca |
| import CSV | 4/5, 93,14 s, brak walidacji pustych pól | 5/5, 212,00 s, poprawna większa poprawka | 5/5, 89,04 s, najszybszy poprawny wynik |
Liczby testów publicznych różniły się, ponieważ agent mógł dopisywać własne przypadki. Ukryte kontrole były wspólne dla wszystkich trzech przebiegów i dlatego nadają się do porównania. Czasy w tabeli oznaczają łączny czas od uruchomienia do końca pojedynczego przebiegu, a medium oznacza średni poziom rozumowania klienta.
OpenCode pominął jawny kontrakt w małym eksporcie, a potem wygrał import pod względem poprawności i czasu. Qwen Code przygotował najmniejszą zgodną zmianę paginacji, lecz w imporcie przepuścił pustą nazwę lub rolę. Codex był tam najwolniejszy, za to obsłużył wszystkie ukryte przypadki importu.
Żaden klient nie był najlepszy w każdym zadaniu.
Dlaczego harness zmienia wynik tego samego modelu
Klient określa instrukcje przekazywane modelowi, opisy narzędzi, moment skrócenia historii rozmowy, reakcję na błąd i rozmiar początkowego kontekstu. W naszych przebiegach różnice były widoczne:
- Qwen Code znał parametry Qwena i najlepiej wykorzystał długie okno;
- Codex lepiej orientował się na początku niektórych małych zadań, ale potrafił rozszerzyć zakres;
- OpenCode bywał minimalny i szybki, po czym kontynuował pracę po rozwiązaniu problemu;
- Claude Code ukończył pracę przez emulator, lecz ta ścieżka nie ma wsparcia producenta.
Dlatego wdrożenie modelu do kodu wymaga wyboru klienta, profilu, uprawnień i testu dopasowanego do repozytorium.
Co wybralibyśmy po tych próbach
Na tym domowym stanowisku Qwen Code z poziomem medium pozostał domyślnym klientem do długiej pracy. OpenCode zasługuje na dalsze testy przy małych, jasno ograniczonych zmianach. Codex jest użytecznym punktem odniesienia i obsługuje konfigurowanych dostawców modeli, lecz jego lokalny profil wymaga osobnych ocen. Claude Code z Qwenem pozostaje próbą zgodności.
Inny zespół może dostać inną kolejność. Trzy własne zgłoszenia mówią więcej niż publiczna tabela: mały błąd, funkcja z ukrytym przypadkiem i zmiana wymagająca długiej historii.
Jak zamienić to w korzyść dla zespołu
Syntalith może przeprowadzić taki wybór na repozytorium klienta. Bierzemy od trzech do kilkunastu reprezentatywnych zadań, przygotowujemy wspólne kryteria i ukryte kontrole, uruchamiamy dwa sensowne profile w odizolowanych kopiach, a potem przekazujemy:
- zaakceptowany profil klienta i modelu;
- konkretne wyniki, odrzucone warianty i powody;
- granice narzędzi oraz wymagane zatwierdzenia;
- skrypt powtórzenia testu po aktualizacji;
- warsztat, na którym zespół sam ocenia kolejną zmianę.
To może być część Kursu AI-Native na własnym repozytorium zespołu. Jeśli wybór ma prowadzić do lokalnego wdrożenia, Audyt procesu AI zaczyna się od 4990 zł netto. Bezpłatny skan procesu ustala, czy warto testować lokalnego Qwena, czy lepiej zostać przy już używanym narzędziu.
Pełne zanonimizowane liczby są w zestawieniu wyników. Osobno pokazujemy interfejs zbudowany przez Qwen Code w 26 minut.
Bezpłatny skan procesów
Zacznij od bezpłatnego skanu procesów.
- 30 minut z inżynierem, który może prowadzić Twoje wdrożenie.
- Przegląd procesów, które kosztują Cię najwięcej czasu i pieniędzy.
- Pisemne podsumowanie: co zautomatyzować, w jakiej kolejności, z widełkami kosztów.
W 30 minut wybieramy proces do oceny, a w ciągu 2 dni roboczych dostajesz rekomendację, także gdy lepsza będzie prostsza droga.
0 zł
30 minut · pisemne podsumowanie w 2 dni robocze
Terminy zobaczysz w swojej strefie czasowej.
Wolisz napisać? Opisz proces