~/blog

Fabryka kodu w homelabie: Jak spiąłem Paperclipa, OmniRouter, flotę modeli i GitLaba w jeden potok

23.10.2026 · 4 min

Większość dyskusji o „programowaniu z AI” kończy się na zachwytach nad promptem wklejanym w przeglądarkę albo nad kolejnym edytorem, który po cichu wysyła Twoją bazę kodu do chmury i blokuje się po przekroczeniu limitu zapytań. Przy jednym pliku to działa. Przy ekosystemie kilkunastu mikroserwisów, aplikacji webowych i infrastrukturze homelaba — leżysz i kwiczysz.

Zamiast bawić się w półśrodki, zbudowałem w serwerowni w pełni zautomatyzowaną fabrykę kodu sterowaną agentami.

Żaden model nie ma bezpośredniego dostępu do gałęzi main. Żadne zapytanie nie leci bezpośrednio do drogich API bez kontroli kosztów. Całość spina autorski potok: mój prompt → Paperclip → autorouter OmniRouter (chmura + lokalne LM Studio) → rygorystyczna analiza i testy w worktree → Merge Request do prywatnego GitLaba z CI/CD.

Oto jak ta machina wygląda pod maską.


1. Wielki obraz: Pełna topologia potoku

Cały proces od wpisania zadania do gotowego kodu z testami odbywa się wewnątrz prywatnej sieci i na dedykowanych węzłach wirtualizacji:



2. Serce orkiestracji: Paperclip

Wewnątrz domowej infrastruktury działa Paperclip — centralny orkiestrator i dyspozytor zadań dla modeli językowych.

Gdy mam do zrobienia feature lub refaktor, nie wklejam kodu do okienka. Wrzucam prompt i zadanie do Paperclipa:

  • Zadania w kwarantannie: Paperclip tworzy izolowaną przestrzeń roboczą dla danego ticketu.
  • Pamięć trwała (Compounding Wiki): Zamiast naiwnego RAG-a, który co zapytanie od nowa przeszukuje losowe fragmenty tekstu, Paperclip utrzymuje ustrukturyzowaną bazę wiedzy o projektach. Jeśli agent podczas rozwiązywania problemu poznał specyfikę bazy CMS-a, biblioteki animacji czy konfiguracji reverse-proxy, zapisuje to w schemacie wiedzy.
  • Zarządzanie stanem: Agent wie, co zostało zrobione w poprzednim kroku, jakie pliki zostały zmodyfikowane i dlaczego dany test wywalił asercję.

3. Giełda modeli: OmniRouter i lokalne LM Studio

Paperclip nie rozmawia z zewnętrznymi API bezpośrednio. Wszystkie żądania wykonawcze trafiają na ujednolicony endpoint OmniRoutera.

W OmniRouterze działa silnik autoroutera, który analizuje złożoność prompta, bieżące obciążenie, limity dostawców i stan portfela. Zależnie od warunków, ruch przekierowywany jest dynamicznie:

  1. Top-Tier / Architektura (gdy potrzebne jest potężne rozumowanie):
    • Claude Code
    • Antigravity
    • Codex / Mistral Large
  2. Gatewaye i agregatory (gdy liczy się elastyczność i load balancing):
    • OpenRouter & KiloGateway — routing do wyspecjalizowanych modeli bez konieczności utrzymywania kilkunastu osobnych subskrypcji.
    • Trae & Gemini CLI — do szybkich, równoległych weryfikacji i zadań wymagających gigantycznego okna kontekstowego.
  3. Self-Hosted Local: LM Studio:
    • Nasz lokalny wół roboczy postawiony bezpośrednio w klastrze homelaba.
    • Przetwarza zadania, które nie powinny opuszczać sieci LAN (analiza wewnętrznych logów, konfiguracje środowiskowe, masowe sprawdzanie składni, lintering).
    • Koszt: 0 zł. Narzut na zewnętrzne łącze: 0 ms.

Automatyczny Failover: Koniec z błędami 429 i 529

Jeśli zewnętrzny dostawca rzuci przeciążeniem serwera (529 Overloaded) albo wyczerpie się sekundowy limit zapytań (RPM/TPM), autorouter OmniRoutera w ułamku sekundy przepina strumień na model zapasowy o zbliżonej charakterystyce (np. z jednego gatewaya na Mistrala lub Gemini). Agent w Paperclipie nie przerywa zadania po 40 minutach pracy — po prostu kontynuuje pisanie kodu.


4. Wykonanie i audyt: Żelazne reguły w worktree

Gdy model zwróci plan zmian i instrukcje, zaczyna się właściwa inżynieria w izolowanym Git Worktree:

  1. Rygor AGENTS.md: Agent ma obowiązek przeczytać plik kontraktu projektu. Wie, jakich reguł typowania przestrzegamy, że nie commitujemy bezpośrednio do gałęzi głównej, a krytyczne pętle animacji nie mogą powodować niekontrolowanego zrzucania pamięci przez Garbage Collector.
  2. Kompilacja i testy: Zanim kod gdziekolwiek wyjdzie, odpala się lokalny potok weryfikacyjny:
    bash
    npm run lint && npm run typecheck && npm test
    Jeśli cokolwiek zgłasza błąd — model ma obowiązek poprawić swój kod w kolejnym przebiegu.
  3. Czyszczenie historii commitów: Narzędzia AI uwielbiają dopisywać do commitów niepotrzebne stopki i trailery. Nasz proces bezlitośnie czyści te metadane z gałęzi, zostawiając schludną, profesjonalną historię Gita.

5. Finał: Merge Request do własnego GitLaba z CI/CD

To jest najważniejszy punkt całej filozofii: żaden agent nie ma uprawnień do samodzielnego wdrożenia kodu na produkcję.

Po pomyślnym przejściu wszystkich testów w worktree, wygenerowany branch jest pushowany na własny GitLab z CI/CD.

Tam automatycznie otwierany jest Merge Request (MR) zawierający:

  • Zwięzły opis wprowadzonych zmian i motywację architektoniczną.
  • Listę zmodyfikowanych modułów wraz z wynikami testów.
  • Identyfikator powiązanego zadania z Paperclipa.

W tym momencie odpala się GitLab CI — buduje kontener produkcyjny, testuje migracje bazy danych i weryfikuje integralność całej aplikacji.

Ja dostaję powiadomienie, otwieram GitLaba, robię szybki code review czystego diffa i jednym kliknięciem zatwierdzam merge. Webhook systemu wdrożeniowego odbiera sygnał i w kilkadziesiąt sekund nowa wersja żyje na serwerze.


Dlaczego właśnie tak?

Większość ludzi traktuje AI w programowaniu jak gadającego bota. Dla mnie to zoptymalizowany podwykonawca wpięty w szyny infrastruktury:

  • Paperclip trzyma kontekst i pilnuje porządku w zadaniach.
  • OmniRouter tnie koszty, eliminuje przestoje API i pozwala płynnie miksować chmurę z lokalnym LM Studio.
  • Własny GitLab z CI/CD gwarantuje, że nic nie wybuchnie na produkcji bez mojego ostatecznego zatwierdzenia.

To nie jest „vibecoding”. To przewidywalna, odporna na awarie inżynieria.

#AI#Agentic Coding#Coding#Homelab#DevOps#Architecture#Self-hosted

Komentarze

Jeszcze nikt nie skomentował. Bądź pierwszy.