Replicord · Plan architektoniczny
Senior Agent który z nieformalnego opisu użytkownika samodzielnie generuje, waliduje i zapisuje do systemu nowego Junior Agenta — kompletny manifest.json i skrypt Python.
01 · Przegląd pipeline
Każdy etap to osobny Junior Agent. Dane przepływają przez ctx — JSON mergowany po każdym kroku. Każdy agent dodaje własne klucze z prefiksem.
Po etapie 06 serwer automatycznie wykrywa nowego agenta przy kolejnym
GET /api/junior-agents
— katalog junior-agents/ jest skanowany dynamicznie.
02 · Szczegóły etapów
Etap 01 — interpretacja-intencji
| opis_potrzeby | humannieformalny opis co ma robić agent |
| ii_cel_agenta | stringjedno zdanie — cel agenta |
| ii_dane_wejsciowe | arraylista {nazwa, typ, zrodlo, opis} |
| ii_dane_wyjsciowe | arraylista {nazwa, typ, opis} |
| ii_typ_logiki | enumapi_call / scraping / obliczenia / llm / plik |
| ii_zewnetrzne_api | stringbiblioteki/API np. "requests" lub "" |
| ii_robocza_nazwa | stringkebab-case, max 40 znaków |
Etap 02 — projektowanie-agenta
| pa_nazwa_katalogu | kebab-case nazwa katalogu |
| pa_nazwa_skryptu | snake_case.py |
| pa_display_name | nazwa do UI |
| pa_opis | opis do manifest.json (3–4 zdania) |
| pa_input_spec | obiekt sekcji input |
| pa_output_spec | obiekt sekcji output |
| pa_wymagania | lista pakietów pip (bez stdlib) |
| pa_settings_spec | sekcja settings lub {} |
| pa_logika_krok_po_kroku | numerowane kroki implementacji |
Etap 03 — zatwierdzenie-projektu
odpowiedz = ctx.get('zatwierdz_projekt', '').strip().upper()
if not odpowiedz.startswith('TAK') \
and odpowiedz not in ('T', 'YES', 'Y'):
log("Pipeline anulowany przez użytkownika.")
sys.exit(1)
Etap 04 — generowanie-kodu-agenta
prompts/prompt_new_skill_generation.md z pełnymi konwencjami projektu BC17 (wzorzec main, NAZWA_AGENTA, PROJECT_ROOT, log(), zapisz_audyt()) oraz few-shot przykładem poprawnego skryptu.| gk_kod_skryptu | pełny kod Python jako string |
| gk_kod_manifestu | pełny JSON manifestu jako string |
| gk_nazwa_katalogu | echo pa_nazwa_katalogu |
| gk_nazwa_skryptu | echo pa_nazwa_skryptu |
json.loads(gk_kod_manifestu) musi przejść — przy błędzie sys.exit(1)Etap 05 — walidacja-agenta
Etap 06 — zapis-agenta
junior-agents/ dynamicznie przy każdym wywołaniu API.katalog = os.path.join(PROJECT_ROOT, 'junior-agents', gk_nazwa)
if os.path.exists(katalog):
log("OSTRZEŻENIE: katalog już istnieje")
os.makedirs(katalog, exist_ok=True)
with open(manifest_path, 'w', encoding='utf-8') as f:
f.write(gk_kod_manifestu)
with open(skrypt_path, 'w', encoding='utf-8') as f:
f.write(gk_kod_skryptu)
03 · Pliki do stworzenia
Każdy junior agent to para: manifest.json + skrypt Python. Plus modyfikacje plików data/ by zarejestrować Senior Agenta i klucze API.
Plus modyfikacje:
04 · Ryzyka i mitygacje
Architektura BC17 zbiera pola source: "human" ZANIM skrypt etapu 3 cokolwiek wyświetli. Mitygacja: etap 02 musi wypisać na stderr sformatowane podsumowanie projektu — logi są widoczne w UI w momencie gdy etap 03 pyta o TAK/NIE.
LLM ma zwrócić JSON gdzie gk_kod_skryptu to wieloliniowy kod Python. Modele czasem gubią cudzysłowy. Mitygacja: response_format=json_object wymusza JSON + defensywny json.loads() + logowanie pierwszych 500 znaków przy błędzie.
LLM może wygenerować kod który nie używa sys.stdin.read() lub pisze debug na stdout. Mitygacja: few-shot w system prompcie (wzorcowe 20 linii main()) + etap 05 wychwytuje te przypadki i blokuje zapis.
Etap 06 z exist_ok=True cicho nadpisuje pliki. Mitygacja: logowanie ostrzeżenia gdy katalog istnieje; do rozszerzenia o suffix _v2.
Po etapie 04 ctx zawiera stringi z pełnym kodem (duże). Mitygacja: etap 04 buduje user message tylko z wybranymi kluczami pa_* i ii_* — nie wysyła całego ctx do LLM.
05 · Weryfikacja end-to-end
Uruchom serwer: npm start — sprawdź że 6 nowych agentów widoczne w GET /api/junior-agents
Utwórz Senior Agenta "Narodziny Junior Agenta" przez UI lub przez POST /api/senior-agents z listą 6 agentów
Uruchom z testem: "Agent ma pobierać aktualny kurs EUR/PLN z API NBP i zwracać kurs jako string"
Sprawdź logi etapów 1–2 — powinny zawierać sformatowaną specyfikację: cel, wejścia, wyjścia, logika krok po kroku
Na etapie 3 wpisz TAK — pipeline kontynuuje do generowania
Poczekaj na etap 4 (generowanie ~15–30s dla gpt-4o) — sprawdź że etap 5 przeszedł bez błędów krytycznych
Etap 6 tworzy junior-agents/pobieranie-kursu-nbp/ (lub podobna nazwa) — sprawdź katalog na dysku
Odśwież GET /api/junior-agents — nowy agent powinien być widoczny w systemie natychmiast
Przetestuj nowy agent przez POST /api/junior-agents/{nazwa}/test — walidacja kontraktu stdin/stdout