16 paralelnih Claude agenata — naslovna

  1. februara 2026, Nicholas Carlini iz Anthropic-a objavio je tekst o eksperimentu koji značajno prednjači onome što većina nas trenutno radi sa LLM agentima. Šesnaest paralelnih instanci Claude Opus 4.6, dve nedelje rada, ~2.000 Claude Code sesija, budžet oko $20.000. Rezultat: 100.000 linija C kompajlera u Rust-u koji gradi Linux 6.9 na x86, ARM i RISC-V; prolazi 99% GCC torture test suite-a; kompajlira PostgreSQL, SQLite, FFmpeg, Redis i QEMU; pokreće Doom. Repozitorijum je otvoren i svako može da ga pročita i isproba.

To je ozbiljan inženjerski rad, a sam tekst je odlično štivo za svakoga ko razmišlja o autonomnim agentima u produkciji. Carlini je iskren oko onoga što je radilo i što nije, prolazi kroz pet konkretnih lekcija iz dizajna harness-a, i deli brojeve i metrike. Upravo takvi izveštaji nedostaju industriji — izveštaj iz prve ruke o tome kako stvarno izgledaju dugotrajni autonomni run-ovi.

Naslovi su se podelili u dva tabora. „AI je zamenio programere” sa jedne strane. „To je samo demo” sa druge. Oba promašuju ono što je stvarno zanimljivo.

Ako pažljivo pročitaš tekst, ono što Carlini dokumentuje nije „AI piše kompajler”. On dokumentuje koliko je infrastrukture moralo da se izgradi oko agenata jer u 2026. još uvek ne postoji nikakva infrastruktura između samih agenata. Lockfile-ovi u deljenom direktorijumu kao mehanizam sinhronizacije. README-ovi koje agent piše sam sebi. GCC mobilisan kao known-good referentni orakl. Ralph-loop omotan oko Docker-a za neograničenu autonomiju. Svaki od ovih pristupa je odgovor na konkretan problem koji danas jednostavno nema gde da se gurne u standardni sloj.

I to je prava vrednost teksta. Ne kao „AI demo”, već kao detaljna mapa nedostajućih primitiva, koju je nacrtao neko ko je rukama izgradio rešenja za njih. Poslednjih nekoliko meseci radim upravo na tim primitivima, i Carlini-jev tekst je odličan povod da se priča o tome šta je potrebno sledećoj generaciji timova agenata.

Svaka sesija počinje sa amnezijom

Carlini je izgradio harness koji pokreće Claude-a u beskonačnoj petlji — kad agent završi jedan zadatak, preuzima sledeći. Arhitektonski je to poznati „Ralph-loop” pattern: ciklus while true u bash skripti, omotan u Docker zbog bezbednosti. U jednom od run-ova, Claude je slučajno ubio sam sebe sa pkill -9 bash, što Carlini navodi kao zabavan sporedni efekat.

Ključna detalj je da je svaki od ~2.000 lansiranja počeo u svežem Docker kontejneru sa praznim kontekstom. Bez memorije između sesija. Svaki agent je iznova ustanovljavao: šta je ovaj repozitorijum, šta je urađeno, koji je status zadataka, šta je probano i palo.

Carlini-jev workaround je bio da uputi Claude-a da sam vodi opširne README-ove i progress fajlove, ažurirajući ih često. Kad agent zaglavi u bag-u, takođe vodi running doc o neuspelim pristupima i preostalim zadacima.

To radi u okvirima trenutnog tooling-a — i u tome je njegova vrednost. Ali kad pogledaš skaliranje, dve arhitektonske tačke počinju da škripe.

Prvo, tekstualni fajl nije strukturiran. Ako želiš da pitaš „koja su poslednja tri buga koje sam fiksirao u oblasti parsera i kako su završili?”, imaš samo grep i regularne izraze. Na malom projektu je podnošljivo. Na 100.000 linija koda i 2.000 sesija — postaje usko grlo.

Drugo, suptilnije: svaki agent vodi te fajlove za sebe. Žive u deljenom git repozitorijumu, ali nema mehanizma koji kaže „pre nego što preuzmeš zadatak X, pogledaj šta je ostalih 16 agenata pisalo o ovoj oblasti u poslednjih 6 sati”. Svaki agent piše svoj README, mergeuje tuđe izmene, i nada se da će se stvari konvergirati.

Ovo je prva generacija deljene memorije — implementirana kao plain text jer ni jedan zgodniji primitiv još nije postao standard.

Lockfile-ovi kao koordinacija

Paralelizam je implementiran minimalno. Svaki agent radi u svom Docker kontejneru; deljeni bare git repozitorijum drži stanje. Koordinacija zadataka ide kroz lockfile-ove: agent piše fajl tipa current_tasks/parse_if_statement.txt, radi git push i time „preuzima” zadatak. Ako dva agenta pokušaju da preuzmu isti, git sinhronizacija primorava drugog da uzme nešto drugo. Gotovo — obriši lockfile.

Carlini direktno opisuje trenutno stanje sistema: „no other method for communication between agents… I don’t use an orchestration agent.” Bez mehanizma da agenti „pitaju jedni druge”. Bez centralne koordinacije. Svaki Claude sam odlučuje šta da radi sledeće — obično „sledeći očigledan problem”.

Lockfile ovde radi tačno jednu stvar — funkcioniše kao mutex, štiteći od paralelnih zauzimanja jednog zadatka. To je vredno. Ali ne rešava drugi problem: dva agenta koji rade na različitim zadacima u istoj oblasti koda mogu pisati konfliktni kod pod različitim imenima zadataka. Upravo to se desilo sa Linux kernel-om u eksperimentu — agenti su konvergirali na isti bug, popravljali ga drugačije, prepisivali tuđe izmene, i paralelizam je privremeno prestao da se isplati.

Carlini-jevo rešenje bio je odvojen test harness koji koristi GCC kao known-good kompajler-orakl: većina kernel-a se kompajlira sa GCC, a slučajan podskup fajlova prolazi kroz Claude-ov kompajler. Ako se kernel ne pokreće, bug je negde u Claude-ovom podskupu, i možeš dalje sužavati. Pametna i elegantna ideja, i radila je tačno kako je zamišljeno.

Vredi napomenuti granice u kojima ovo radi. GCC orakl je precizno rešenje za ovaj konkretan zadatak, jer zadatak ima tri zgodne osobine: postoji gotov referentni kompajler za istu specifikaciju, zadatak se dekomponuje na nivou pojedinačnih fajlova, i ishod je binarni (boot-uje ili ne).

U većini realnih projekata — produktni razvoj, legacy refaktorisanje, ML pipeline-ovi, mobilne aplikacije — ovi pogodnosti ne postoje. Nema gotovog known-good za poređenje. Nema prirodne dekompozicije po fajlovima. Ishodi nisu binarni. Što znači da se GCC-orakl tehnika ne može generalizovati kao primitiv — radi gde radi, i ne postoji gde ne radi.

Posmatran u celini, Carlini-jev toolkit lepo se postavlja po dve ose:

Šta timovima agenata trebaŠta je u eksperimentuPriroda rešenja
Otkrivanje agenatahard-kodovan broj kontejnerahard-kodovano
Inter-agent komunikacijalockfile preko git pushmutex bez messaging-a
Delegiranje zadatakanext-most-obvious iz redabez routing-a
Deljeno stanje / memorijaREADME + progress fajloviplain text
Kauzalna istorijarunning doc o neuspelim pristupimalični log
VerifikacijaGCC oraklspecifično za zadatak

Ovo su dve nezavisne ose problema: komunikacija (kako agenti razgovaraju jedni sa drugima) i memorija (šta pamte između sesija i da li to dele). Ove ose zahtevaju različite primitive i različita rešenja. I na svakoj industrija trenutno konvergira ka standardima i open-source implementacijama.

Sledeće — šta je danas dostupno na svakoj osi.

Osa komunikacije: A2A protokol i a2abridge

Komunikacija se brzo razvijala i već je stigla do zrelog standarda. U aprilu 2025, Google je otvorio A2A protokol — Agent-to-Agent. U avgustu 2025, IBM-ov ACP se spojio sa A2A pod Linux Foundation-om, i do aprila 2026 spec je na verziji 1.2, podržana od 150+ organizacija (Microsoft, AWS, Salesforce, SAP, ServiceNow, IBM među njima), i nativno ugrađena u Google ADK, LangGraph, CrewAI, LlamaIndex Agents, Semantic Kernel i AutoGen. A2A je u praksi dobio rat protokola. Spec je namerno minimalan: Agent Card je JSON opis mogućnosti agenta (šta radi, koji endpoint da se pogađa). Task je jedinica rada sa statusima i artefaktima. Transport je JSON-RPC 2.0 preko HTTPS, sa Server-Sent Events za stream-ove.

Analogija koja se svuda koristi je HTTP. HTTP ti ne govori šta je u tvom backend-u (Rails, Django, Go) — samo definiše oblik zahteva i odgovora. A2A ti ne govori koji LLM, framework ili bazu koristiš — definiše ugovor između agenta A i agenta B. Minimum povrh kojeg možeš graditi ostalo.

Ako bi Carlini-jev scenarijo prepisao na A2A, umesto lockfile-a u current_tasks/, agent bi pitao directory servis „ko sad radi na parseru?”, dobio Agent Card suseda i poslao Task sa streaming odgovorom preko SSE. To je primitiv komunikacije koji njegov harness još nema.

Poslednjih nekoliko meseci pišem a2abridge — otvorenu Go implementaciju A2A 1.0 ciljanu na praktičan scenarijo „nekoliko različitih AI agenata na mašini jednog developera”. U trenutku objave podržano je šest IDE-ova: Claude Code, Codex CLI, Cursor, Cline, Continue i Gemini CLI. Bilo koji A2A-kompatibilan agent (uključujući buduće Google ADK, LangGraph, CrewAI implementacije) je first-class peer bez glue koda.

Arhitektonski je to jedan Go binary (~10 MB) sa nekoliko subkomandi. a2abridge directory je discovery servis na 127.0.0.1:7777 koji radi kao user-level system service (launchd na macOS, systemd-user na Linux-u, Windows Service na Windows-u, ispravno radi unutar WSL2). a2abridge bridge je per-agent proces koji hostuje i MCP stdio server (kroz koji IDE vidi a2abridge kao običan MCP server sa alatima) i A2A HTTP server na nasumičnom port-u, sa Agent Card-om na /.well-known/a2a i punim setom JSON-RPC 2.0 metoda iz §7 spec-a: SendMessage, SendStreamingMessage, GetTask, ListTasks, CancelTask, SubscribeToTask, GetExtendedAgentCard. Lifecycle bridge-a se poklapa sa trajanjem IDE sesije — kad se MCP stdio zatvori, bridge umire, bez orphan procesa.

Ono što Claude Code (ili bilo koji drugi IDE) vidi kao MCP alate: a2a_whoami, a2a_list_agents, a2a_send_message, a2a_send_streaming, a2a_get_task, a2a_cancel_task, a2a_inbox, a2a_complete_task. Unutar sesije, agent može samostalno otkrivati druge agente na mašini, slati im zadatke, čekati odgovore i čitati svoj inbox — bez intervencije korisnika.

Iznad protokola postoji proaktivni sloj koji nije u spec-u ali je potreban za realno korišćenje. Bridge piše inbox fajl ./.a2a/inbox-<ppid>.json svaki put kad se promeni red poruka. UserPromptSubmit hook ubacuje pristigle poruke u sistemski prompt pre prvog tool call-a — što znači da Claude vidi „imaš poruku od peer-a sa FYI o breaking API change-u” pre nego što počne slepo da deluje. SSE fast-path isporučuje odgovore u milisekundama, fallback je polling svakih 5 sekundi. Za Claude Code postoji i skill a2a-bridge koji se auto-učitava samo na trigger promptove — bez globalno učitanih pravila koja troše tokene na svakoj sesiji.

U Carlini-jevom scenariju to bi izgledalo ovako: agent 5 preuzima zadatak „fix kernel build error in mm/page_alloc.c”. Pre delovanja, zove a2a_list_agents, vidi da agent 2 ima otvoren Task sa capability kernel-debug u istoj oblasti. Šalje a2a_send_message: „na čemu radiš, imaš li hipotezu?”. Dobija streaming odgovor: „probao alignment fix, pao na test_kernel_boot, trenutno gledam reorder header includes”. Bira drugi ugao.

Zašto otvoren protokol a ne još jedan custom wire format. U ovoj niši već postoji nekoliko rešenja: Anthropic Agent Teams radi samo Claude↔Claude i vezan je za pretplatu. CCB i claude-multi-agent-bridge su zatvoreni formati zaključani na specifične kombinacije agenata. Ruflo je odličan za enterprise federacije 100+ agenata sa centralnim queens, ali to je drugi razred problema. Niša koju a2abridge cilja je cross-vendor open-protocol mesh, gde danas ulaze Claude i Codex, a sutra bilo koji A2A-kompatibilan agent, bez prepisivanja glue. Ako industrija ide ka standardu, bridge bolje da govori taj standard.

Production zrelost: cross-machine federacija sa mTLS + ed25519 (opt-in, za scenarijo „kućni Mac ↔ kancelarijski Linux”), mDNS auto-discovery na lokalnoj mreži, PII/secret screen sa 11 regex detektora pre slanja (AWS ključevi, GitHub tokeni, Anthropic/OpenAI/Google/Stripe/Slack tokeni, JWT-ovi, PEM blokovi — zamenjeni sa [REDACTED:<name>], secret nikad ne napušta bridge), Push Notifications po A2A 1.0 §9.5, HTTP+REST binding po §7.3, 35 test slučajeva pod -race, GitHub Actions release matrix i cross-platform a2abridge doctor sa 9-provera health audit-om. Instalacija je jedna komanda kroz install.sh ili install.ps1, sa auto-detekcijom svakog IDE-a na mašini i .bak backup-ovima njihovih konfiguracija pre izmena.

Repozitorijum: github.com/vbcherepanov/a2abridge — MIT, Go 1.25, trenutni release v2.0.

Osa memorije: total-agent-memory i BrainCore

Memorija je u drugačijem stanju. Standarda na nivou A2A još nema — svako gradi svoj sloj, i različiti pristupi se biraju za različite zadatke. Ono što agent piše sam sebi u README-u u suštini je kauzalni log u tekstualnom obliku: „probao A, pao na B, prešao na C”. Struktura je ispravna; implementacija je još plain text.

Radim na dva proizvoda na ovoj osi.

total-agent-memory — open-source implementacija. Osnovni retrieval patterni, MCP integracija i osnovni causal-chain model žive ovde. Svako može da klonira, vidi kako radi, i uključi u svoj Claude Code ili Cursor.

BrainCore — production-grade. Go binary, lokalni SQLite + WAL, tree-sitter za code-graph kroz 14 jezika (PHP, TypeScript, Python, Ruby, Rust, Java, Kotlin, C/C++, C#, Swift, Bash, Lua, YAML, plus Go kroz svoj nativni AST), internal git za time-travel memoriju, MCP protokol za povezivanje sa Claude Code, Cursor, Codex CLI, Windsurf i još nekoliko agenata. Trenutno u beti.

Arhitektonski postoje tri tačke gde oba projekta odstupaju od ravnog bag-of-facts sa cosine pretragom.

Prvo, kauzalni decision chains umesto ravnih činjenica. Ne „funkcija X je u fajlu Y”, već „agent 3 u zadatku fix kernel build formulisao hipotezu alignment issue, verifikovao kroz test_kernel_boot, pao, prešao na hipotezu header reorder”. Svaki korak je tipiziran, povezan kauzalnom strelicom, i pretraživ od strane svakog agenta.

Drugo, AST-stabilna identitet koda. Kad nekoliko agenata refaktorišu paralelno, tekstualni diff-ovi brzo postanu kaša, a merge konflikti beskrajni. AST čvor ostaje čvor čak i ako se funkcija premestila iz parser.rs u frontend/lexer.rs i preimenovala iz parse_decl u parse_declaration. U grafu, to je isti čvor sa istorijom premeštanja. Svaki agent gleda na istu apstrakciju, ne na „linije 127-145 fajla X”.

Treće, persistencija kroz restart kontejnera. Memorija živi van Docker kontejnera: na host-u kroz volume, ili udaljeno preko MCP. Upit brain.causal_lookup(area="parser", lookback="6h") vraća isti rezultat bez obzira u kom svežem kontejneru se nalaziš.

Prepisivanje Carlini-jevog scenarija sa memorijom: agent 5 ide u BrainCore, dobija kauzalni log „agent_2 probao alignment fix → pao, agent_7 probao header reorder → pao na L98, trenutna hipoteza od agent_3 je alignment issue, in progress”, bira četvrtu hipotezu, piše je u kauzalni lanac. Agenti 2, 3 i 7 vide tu odluku na sledećem pull-u. Bez README-ova, bez grep-ova.

Kako se uklapaju zajedno

a2abridge i BrainCore su različiti slojevi, ne konkurenti. Jedan odgovara na „kako agenti razgovaraju jedni sa drugima”, drugi na „šta pamte”.

Puna slika za tim agenata izgleda ovako. BrainCore drži deljeno stanje sveta: code-graph, kauzalne lance, hipoteze, zaključke. a2abridge obezbeđuje stvarnu komunikaciju između agenata: discovery, delegiranje, streaming odgovore, inbox sa context injection-om. Kad rade zajedno, agent 5 vidi poruku u inbox-u od agenta 2 („radim na X”), upita BrainCore za detalje („šta je konkretno probano u ovoj oblasti”), donosi informisanu odluku, odgovara agentu 2 o nameri da preuzme susedni zadatak, i piše rezultat u deljenu memoriju.

To je arhitektura koju Carlini gradi rukama u eksperimentu kroz kombinaciju lockfile-ova + README-ova + GCC orakla. Sa nezavisnim primitivama umesto samogradnog lepka, infrastruktura radi i na zadacima gde nema gotovog known-good kompajlera.

Šta ovi primitivi ne rešavaju

Carlini je apsolutno u pravu oko glavne lekcije teksta: kvalitetan test harness je temelj svega. Nikakva deljena memorija i nikakav A2A te neće spasti ako je verifier zadatka neprecizan — agenti će autonomno rešavati pogrešan zadatak. CI pipeline-ovi, dobro dizajnirani logovi, odbrane od zagađenja kontekst prozora, borba sa „time blindness”-om — to radi na bilo kom nivou infrastrukture i ostaje prvi prioritet.

GCC orakl u zadatku kompajlera je zaista optimalan izbor. Binarna verifikacija je skoro uvek bolja od poređenja kauzalnih hipoteza. Ako u tvom projektu postoji gotov known-good — koristi ga. Nikakva memorija ne zamenjuje dobrog verifier-a.

Ali u većini realnih zadataka — produktni razvoj, refaktorisanje, ML pipeline-ovi, biznis logika — GCC ekvivalent ne postoji. I tu primitivi komunikacije i memorije postaju ne „poboljšanje” već neophodan uslov da tim od 16 agenata bude produktivniji od jednog.

Da je Carlini morao da gradi ceo ovaj tekst-i-fajl sloj u 2026. nije mana njegovog pristupa već simptom trenutka: infrastruktura za timove agenata se još uvek formira. Anthropic eksperiment je najbolja moguća ilustracija toga kako se formira i kuda ide. I to je, po mom mišljenju, prava vrednost Carlini-jevog teksta: iskren izveštaj sa najranije tačke krive po kojoj će ova infrastruktura rasti.


Open source i linkovi

Ako gradiš svoj tim agenata i nailaziš na ove probleme — javi se. Razmena iskustava je vredna u svakom slučaju, a feedback na rane verzije proizvoda je najbolje što može da se desi autorima.