>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
C

Jak pisać kod z AI w terminalu bez Electrona i Node.js

Większość nowoczesnych asystentów programistycznych opartych na AI jest zbudowana mniej więcej tak samo. Są pakowane w potwornych aplikacjach Electron, ciągnąc za sobą Node.js, Pythona lub ciężkie środowiska wykonawcze, zużywając kilkaset megabajtów RAM-u jeszcze przed pierwszym żądaniem i próbując przejąć cały ekran. Jeśli pracujesz na słabym serwerze, starszym laptopie lub po prostu wolisz szybkie narzędzia Unix, to podejście szybko staje się frustrujące.

Niedawno natknąłem się na ciekawy projekt hax autorstwa Alexandra Chekhovsky'ego. To kompaktowy agent programistyczny dla terminala napisany w czystym C. Autor postanowił pójść pod prąd trendom ciężkich nakładek i stworzył narzędzie, które uruchamia się błyskawicznie i waży zaledwie kilka megabajtów.

hax odpowiada na pytanie o własny kod źródłowy używając lokalnego modelu llama.cpp

Co to jest i dlaczego warto tego używać

Hax to narzędzie CLI skompilowane do pojedynczego natywnego pliku binarnego. Proces zajmuje zaledwie kilka megabajtów w pamięci. Jeśli uruchamiasz lokalne sieci neuronowe przez llama.cpp bezpośrednio na swojej stacji roboczej, każdy zaoszczędzony gigabajt RAM ma znaczenie, ponieważ pamięć jest potrzebna na kontekst modelu i jego wagi.

Narzędzie zostało zaprojektowane dla tych, którzy nie chcą widzieć rynków wtyczek, rozbudowanych paneli webowych i niekończących się okien potwierdzeń uprawnień. Wszystko tutaj podąża za klasyczną filozofią Uniksa: mamy stdin, stdout, przejrzyste pliki konfiguracyjne i możliwość wbudowania narzędzia w regularne potoki przetwarzania.

Co czyni ten projekt interesującym w praktyce

W przeciwieństwie do wielu wrapperów CLI wokół API, hax jest zaprojektowany konkretnie jako narzędzie do ciągłej pracy w konsoli.

Delikatne dla terminala

Hax nie przerywa historii przewijania terminala i nie przerysowuje całego ekranu przez ncurses. Narzędzie wyprowadza strumieniowy Markdown z zawijaniem wierszy i aktualizuje tylko bieżącą linię lub obszar wprowadzania. Cała historia terminala pozostaje na miejscu, a tekst można bezpiecznie kopiować myszą bez artefaktów pseudograficznych.

Lokalne modele bez zbędnych komplikacji

Do uruchomienia lokalnego wystarczy włączyć llama-server lub uruchomić ollama. Hax potrafi automatycznie wykryć działające instancje llama.cpp, określić parametry modelu i dostosować kontekst. Nie trzeba pisać wielostronicowych plików JSON tylko po to, żeby przetestować coś lokalnie.

Przejrzystość zapytań sieciowych

W dowolnym momencie możesz wcisnąć Ctrl+T bezpośrednio w sesji interaktywnej i zobaczyć dokładny zapis tego, co zostało wysłane do modelu i co wróciło w odpowiedzi. Jeśli debugujesz prompty lub chcesz sprawdzić, czy dodatkowe pliki nie przedostały się do kontekstu, ta funkcja oszczędza mnóstwo frustracji. Dostępny jest też tryb zbierania szczegółowych logów protokołu sieciowego.

Wsparcie dla różnych dostawców

Narzędzie współpracuje ze standardowymi API chmurowymi i lokalnymi silnikami:

  • OpenAI i kompatybilne punkty końcowe przez klucz OPENAI_API_KEY
  • Anthropic Claude przez ANTHROPIC_API_KEY
  • OpenRouter, OpenCode Zen / Go
  • Codex przez interaktywny login subskrypcji ChatGPT (/login)
  • Lokalne llama.cpp i Ollama

Instalacja i kompilacja

Hax działa na Linuksie, macOS, FreeBSD i OpenBSD. Użytkownicy Windows mogą uruchomić go wewnątrz WSL.

Na macOS i Linuksie najłatwiejszym sposobem instalacji jest Homebrew:

brew install oleksandrchekhovskyi/hax/hax

W Arch Linuksie pakiet jest dostępny w AUR pod nazwą hax.

Jeśli chcesz zbudować plik binarny ręcznie i połączyć go z bibliotekami systemowymi:

git clone https://github.com/OleksandrChekhovskyi/hax.git
cd hax
scripts/install_deps.sh
make
make install

Skrypt zależności pobiera kompilator C, libcurl, jansson, meson, ninja, pkg-config i fzf do autouzupełniania nazw plików przez składnię @file.

Jak z tym pracować

Podstawowym trybem pracy jest interaktywna pętla REPL bezpośrednio w katalogu projektu:

hax

Wewnątrz dostępne są polecenia poprzedzone ukośnikiem. Na przykład /provider wyświetla listę dostępnych backendów i modeli, a /help pokazuje przypisania klawiszy skrótów. Hax zapamiętuje wybrany model i dostawcę między uruchomieniami.

Do skryptów i szybkiej automatyzacji dostępny jest tryb jednorazowy -p:

# Задать разовый вопрос по коду в текущей папке
hax -p "найди места с утечками памяти в main.c"

# Передать данные через пайп
git diff | hax -p "напиши понятный commit message по этому диффу"

# Продолжить последнюю сессию для этого каталога
hax -c

W trybie -p narzędzie wyprowadza tylko czystą odpowiedź do stdout, wysyłając wskazówki serwisowe do stderr. Dzięki temu łatwo łączyć je z grep, xargs i innymi narzędziami Unix.

Pod maską

Projekt jest napisany w standardowym C bez ciężkich frameworków. Żądania sieciowe obsługuje libcurl, a parsowanie i konstrukcja JSON opierają się na kompaktowej bibliotece jansson.

Cała architektura jest zbudowana wokół audytowalności kodu. Sesje i ustawienia są przechowywane jako zwykłe pliki tekstowe zgodne ze standardem XDG. Zamiast złożonego systemu wtyczek funkcjonalność jest rozszerzana przez spawnowanie podprocesów systemu operacyjnego.

Dla kogo jest ten projekt

Jeśli potrzebujesz rozbudowanego IDE z wbudowanymi czatami i wizualnymi wykresami, hax prawdopodobnie nie będzie dla ciebie odpowiedni. Nie ma tutaj wtyczek ani integracji z menu edytora.

Ale jeśli jesteś przyzwyczajony do pracy w tmux, uruchamiasz lokalne LLM-y przez llama-server na własnym sprzęcie lub administrujesz zdalnymi serwerami przez SSH, hax zdecydowanie warto wypróbować. Nie hałasuje, nie pochłania zasobów i robi dokładnie to, o co go poprosisz.

Powiązane projekty