OpenHarness je stvarno hardkovan, jedva otvoren a već uzeo 3.9k+ zvezda! Lako reprodukuj Claude Code.
Harness je zaista popularan; pre nekoliko dana sam napisao članak pa mi se javio urednik iz izdavačke kuće ECCP da razgovaramo o knjizi.

Ne znam šta vi mislite, meni je prilično zanimljivo.
Eto, Laboratorija za nauku o podacima Univerziteta Hong Kong (HKUDS) otvorila je na GitHub-u Harness projekat: OpenHarness.
10 000 linija Python koda implementira 98% funkcija Claude Codea. Veličina je samo 1/44 drugog.
Na GitHub-u 3.9k zvezda; za manje od nedelju dana probio je Trending listu.

Vežite sigurnosne pojaseve, krećemo.
01. Odakle dolazi OpenHarness
OpenHarness ne želi da zameni Claude Code, već da pomogne svima da razumeju kako Claude Code radi i da na njemu izgrade sopstvenog Agenta.
Tim dolazi iz Laboratorije za nauku o podacima Univerziteta Hong Kong, koji je ranije otvorio i projekte poput Auto-Deep-Research, ClawTeam i dr., sa dubokim iskustvom u domenu Agenata.

Arhitektonski, OpenHarness razlaže sposobnosti Agenta u pet ključnih modula:
Agent Loop motor: odgovoran za petlju izvršenja celog Agenta, uključujući striming pozive alata, API retry, paralelnu obradu, brojanje tokena itd.
Harness Toolkit: 46 ugrađenih alata koji pokrivaju operacije nad fajlovima, Shell komande, Web pretragu, MCP protokol i dr., sa podrškom za dinamičko učitavanje Skills-a.
Context i Memory: automatski otkriva CLAUDE.md fajlove, podržava kompresiju konteksta i poseduje perzistentno pamćenje kroz sesije.
Governance upravljanje: višenivojsku kontrolu dozvola, pravila za putanje i komande, Hooks intercept pre i posle poziva alata.
Swarm koordinacija: saradnja više Agenata, izvođenje pod-Agenata i delegiranje zadataka, registracija timova i upravljanje zadacima.
Ovaj modularni dizajn omogućava da se OpenHarness koristi kao kompletan Agent proizvod, ali i da se razloži na delove i ugradi u druge projekte.
Dublje u implementaciju Agent Loop-a
Agent Loop je srce celog sistema. Nije prosta while petlja, već izvršilac zasnovan na mašini stanja.

Svaka faza ima finu kontrolu. Na primer, u fazi izvršenja alata OpenHarness analizira međuzavisnosti alata. Ako dva alata nemaju podatkovnu zavisnost, paralelno se izvršavaju; ako imaju, idu redom.
Ova analiza zavisnosti se radi preko injekcije parametara. Motor proverava da li ulazni parametri svakog alata zavise od izlaza drugih alata i automatski gradi graf izvršenja.
Ovo je znatno efikasnije od prostog sekvencijalnog izvršenja, naročito u scenarijima gde treba pročitati više fajlova ili izvršiti više nezavisnih upita.
Još jedan detalj je striming obrada. Od korisničkog ulaza do konačnog izlaza, podaci se prenose strimingom. To znači da Agent može, dok generiše odgovor, već prikazivati delove korisniku, bez potrebe da čeka završetak svih alata pre nego što vrati sve odjednom.
02. Prvi utisci za 5 minuta
Instalacija OpenHarness-a je vrlo jednostavna:
git clone https://github.com/HKUDS/OpenHarness.git
cd OpenHarnessPreporučujem korišćenje GitHub Desktop aplikacije — zgodnije je.

Zatim pokreni Codex, pročitaj izvorni kod i vidi kako se koristi i instalira.

Posle instalacije, podesi API Key i može da radi:
Prvi korak: izvrši uv sync --extra dev za instalaciju zavisnosti.

Drugi korak: prebacimo konfiguraciju Claude Codea u OpenHarness.

Nakon uspešne konfiguracije, izvršavanjem uv run oh ulazimo u interaktivni terminal OpenHarness-a.

Već može normalno da se koristi.

03. 46 alata dostupnih odmah
OpenHarness u sebi ima 46 alata podeljenih u nekoliko kategorija:
Operacije nad fajlovima: čitanje, pisanje, listanje direktorijuma, pretraga fajlova, poređenje razlika fajlova i dr.
Shell komande: izvršavanje Bash komandi, help komandi, pregled env promenljivih i dr.
Pretraga koda: Grep pretraga, Find fajlovi, semantička pretraga koda i dr.
Web kategorija: fetch web stranica, web pretraga i dr.
MCP kategorija: klijent za Model Context Protocol, može se povezati sa bilo kojim MCP serverom.

Ovi alati su dostupni odmah, bez potrebe da napišeš ijednu liniju koda.
Ako želiš da Agent upozna tvoje projektne konvencije, dovoljno je da napišeš CLAUDE.md:
# Projektni konvencije
## Stil koda
- Koristi Python 3.10+
- Type annotation mora biti potpun
- Preferiraj pathlib za rad sa putanjama
## Struktura projekta
- src/ za izvorni kod
- tests/ za testove
- docs/ za dokumentacijuAgent pri pokretanju automatski čita ovaj fajl i injektuje konvencije u System Prompt.
Zanimljivo je da je poziv alata u OpenHarness-u striming. U realnom vremenu vidiš šta Agent razmišlja, koji alat je pozvao, koji su parametri, koji je rezultat. Ta transparentnost je vrlo korisna za razumevanje ponašanja Agenta i debug-ovanje.

Pored toga, poziv alata podržava paralelno izvršenje. Ako Agent mora istovremeno da čita više fajlova ili izvršava više nezavisnih Shell komandi, automatski ih paralelizuje. Po završetku, rezultati se vraćaju modelu redom radi dalje obrade.
Mehanizam ispod poziva alata
Poziv alata nije prosta funkcija. OpenHarness implementira kompletan lifecycle upravljanje alatom:

Validacija parametara: svaki alat ima JSON Schema format parametara. Kada Agent generiše parametre, sistem najpre proverava da li odgovaraju šemi; ako ne, odmah prijavljuje grešku, bez poziva prave funkcije alata.
Timeout kontrola: Shell komanda može da se zaglavi, čitanje fajla može naići na ogroman fajl. OpenHarness za svaki alat postavlja podrazumevani timeout (obično 30 sekundi) i pri prelasku ga prekida i vraća grešku.
Skracivanje rezultata: rezultat alata može biti dugačak (na primer grep vraća hiljade redova). OpenHarness pametno skraćuje, zadržavajući ključne informacije, a pritom obaveštava Agenta da je rezultat skraćen, da bi se izbegla eksplozija konteksta.
Klasifikacija grešaka: neuspeh alata može biti različite prirode — greška u parametrima, nedostatak dozvole, resurs ne postoji, timeout. OpenHarness klasifikuje greške, pa Agent na osnovu tipa odlučuje da li da retry-uje, promeni pristup ili traži pomoć od korisnika.
04. Skills sistem
Skill nije samo alat, već kompletan paket znanja. Jedan Skill može da sadrži:
- Definicije alata: koje alate ovaj Skill koristi
- Dokument znanja: domensko znanje u .md formatu
- Hooks: logika intercepta pre i posle poziva alata
- Primer koda: kako koristiti ovaj Skill

OpenHarness je izvorno kompatibilan sa Skill formatom iz anthropics/skills repozitorijuma. To znači da možeš direktno koristiti zvanične Anthropic Skills, ali i pisati svoje.
Na primer, često radiš sa CSV fajlovima — možeš napisati CSV Skill:
# CSV Skill
## Alati
- read_file: čita CSV fajl
- write_file: piše u CSV fajl
- bash: izvršava csvkit komande
## Znanje
Pri radu sa CSV fajlovima imaj na umu:
1. Prvo koristi file komandu za detekciju encodinga
2. Za velike fajlove koristi csvkit, nemoj sve odjednom učitavati u memoriju
3. Obrati pažnju na navodnike i prelome reda
## Primer
# Pregled CSV strukture
csvstat data.csv
# Izdvajanje određenih kolona
csvcut -c name,age data.csvStavi ovaj fajl u .skills/csv.md i Agent će ga automatski učitati i koristiti.
Možeš kreirati posebne Skills za različite projekte, timove i biznis scenarije.
Mehanizam učitavanja Skills-a
Skills nisu statična konfiguracija, već se dinamički učitavaju. Pri pokretanju OpenHarness skenira direktorijum .skills, parsira sve .md fajlove i gradi registar Skills-a.

Proces parsiranja obuhvata nekoliko koraka:
Parsiranje Markdown-a: izdvaja Frontmatter (ako postoji), naslove, blokove koda, liste i druge strukture.
Prepoznavanje namere: analizira dokument znanja, izdvaja ključne reči i entitete, gradi vektorski indeks. Tako Agent na osnovu korisničkog ulaza brzo pronalazi odgovarajući Skill.
Povezivanje alata: povezuje alate deklarisane u Skill-u sa stvarnim implementacijama. Ako deklarisan alat ne postoji, prijavljuje grešku.
Hot reload: Skills podržavaju hot reload. Ako izmeniš Skill fajl u toku rada, Agent odmah to detektuje i ponovo ga učita, bez restarta.
Ovaj dinamički mehanizam učitavanja čini Skills veoma fleksibilnim. Možeš menjati kombinacije Skills-a prema tipu zadatka: pri obradi podataka učitaj Skills za analizu podataka, pri pisanju frontend-a učitaj frontend Skills, i izbegavaj ometanje odluke Agenta nevezanim znanjem.
Još jedan detalj: Skills imaju prioritet. Ako više Skills-a pokriva istu temu, OpenHarness na osnovu poklapanja i eksplicitnog prioriteta Skills-a odlučuje koji da koristi.
05. Bezbednosne granice Agenta
Agent može da izvršava Shell komande i čita/pisaje fajlove — to je i moć i rizik. Governance modul OpenHarness-a rešava ovaj problem.
On nudi više nivoa dozvola:
Strict režim: sve opasne operacije zahtevaju ljudsku potvrdu Auto režim: poverljive operacije automatski, sumnjive traže potvrdu Full režim: potpuno automatski, za CI/CD i slične nenadgledane scenarije

Osim globalnog režima, mogu se konfigurisati i finija pravila:
permissions:
paths:
allow:
- ./src/**
- ./tests/**
deny:
- ~/.ssh/**
- /etc/**
commands:
allow:
- git *
- python *
- pytest *
deny:
- rm -rf /
- sudo *Još moćniji je Hooks sistem. Možeš ubaciti custom logiku pre i posle poziva alata:
@hook("pre_tool_use")
def check_sensitive_files(tool, args):
if tool.name == "write_file" and ".env" in args["path"]:
return Confirm("Da li zaista želiš da izmeniš .env fajl?")
@hook("post_tool_use")
def log_tool_usage(tool, args, result):
logger.info(f"Tool {tool.name} executed with args {args}")Ovaj dizajn omogućava da OpenHarness odgovori enterprise bezbednosnim zahtevima. Možeš audit-ovati svaku operaciju, blokirati opasna ponašanja, pa čak i integrisati IAM sistem kompanije.
Tok izvršenja Governance-a
Provera dozvola nije jednokratna, već višefazni proces odlučivanja:

Faza 1: statička provera — kada Agent generiše zahtev za poziv alata, prvo se radi statičko poklapanje pravila. Proverava se da li je ime alata na whitelist-i, da li su putanje parametara u dozvoljenom opsegu. Ova faza ne izvršava kod, čisto poklapanje stringova — brzo.
Faza 2: dinamička procena — ako statička provera prođe, ulazi se u dinamičku procenu. Hooks se izvršavaju ovde. Hook može pristupiti punom kontekstu: trenutno stanje sesije, istorija operacija, identitet korisnika i dr. Hook može vratiti tri rezultata: dozvoli, odbij, pitaj.
Faza 3: korisnička potvrda — ako prethodne dve faze prođu, a režim je Strict ili Auto, iskače dijalog potvrde. Korisnik može dozvoliti, odbiti, ili dozvoliti ovaj put ali zapamtiti izbor (bez sledećeg pitanja).
Faza 4: audit nakon izvršenja — po završetku alata, PostToolUse Hooks se izvršavaju. Ovde se mogu logovati, slati obaveštenja, ažurirati statistike.
Statička provera hvata očigledne opasne operacije, dinamička procena obrađuje kompleksnu biznis logiku, korisnička potvrda zadržava konačnu odluku, a audit nakon izvršenja obezbeđuje sledljivost.
Redosled izvršenja Hook-a je takođe važan. Više Hook-ova se može registrovati na istu tačku intercepta; izvršavaju se po redosledu registracije. Ako neki Hook vrati odbijenicu, ostali se ne izvršavaju. Ovaj lančani poziv omogućava modularno kombinovanje kontrole dozvola.
Na primer, možeš napisati jedan Hook za proveru osetljivih fajlova, drugi za vreme operacije (na primer, zabraniti opasne operacije noću), treći za audit log. Tri Hook-a se održavaju nezavisno i ne utiču jedna na drugu.
06. Memory: perzistentno pamćenje Agenta
Mnogi Agent framework-i imaju privremeni kontekst koji nestaje po završetku sesije. Memory modul OpenHarness-a rešava ovaj problem.
On u root direktorijumu projekta generiše fajl MEMORY.md koji beleži perzistentne informacije kroz sesije:
# Memory
## Korisničke preference
- Voli Python type annotation
- Preferira funkcionalni stil programiranja
- Često koristi pytest
## Znanje o projektu
- Baza je PostgreSQL
- Keš je Redis
- Deploy na Kubernetes
## Istorijalne odluke
- 2026-04-01: odluka da se koristi FastAPI umesto Flask-a
- 2026-04-02: utvrđen SQLAlchemy 2.0
Agent pri svakom pokretanju čita ovaj fajl i injektuje pamćenje u kontekst. Sa korišćenjem, on automatski i ažurira sadržaj pamćenja.
Memory je još zgodan za beleženje projektnih odluka. Na primer, tim je odlučio FastAPI umesto Flask-a — upišemo u MEMORY.md i Agent će pri generisanju koda automatski poštovati taj izbor, bez potrebe da svaki put pita "FastAPI ili Flask".
Pored toga, Memory podržava kontrolu verzija. Pošto je MEMORY.md običan tekstualni fajl, možeš ga commit-ovati u Git i pratiti istoriju promena pamćenja. Ako neko ažuriranje izazove neobično ponašanje Agenta, lako se vratiš na prethodnu verziju.
Tehnički detalji kompresije Context-a
Dužina konteksta je glavni neprijatelj Agenta. Model ima maksimalnu granicu konteksta (sada obično 200k tokena), a prekoračenje se odseca. OpenHarness implementira pametnu strategiju kompresije konteksta.

Sliding window: istorija razgovora se ne čuva cela, već se održava sliding window. Najnovijih N krugova ostaju potpuni, a stariji se kompresuju u sažetak.
Slojeviti sažetak: sažetak nije prosta skraćenost, već se generiše u slojevima. Prvo se spajaju susedni kratki razgovori, zatim izdvajaju ključne informacije i konačno generiše sažetak višeg nivoa. Tako čak i jako stari razgovori zadržavaju ključne informacije.
Ocena važnosti: svaka poruka ima ocenu važnosti. Izričiti zahtevi korisnika, greške Agenta, rezultati poziva alata smatraju se važnim i zadržavaju se sa prioritetom. ćaskanje i ponavljajuće potvrde se prvo kompresuju.
Token budžet: OpenHarness u realnom vremenu računa zauzeće tokena trenutnog konteksta i dinamički prilagođava strategiju kompresije prema ograničenjima modela. Ako je blizu granice, agresivnije kompresuje istoriju; ako ima prostora, zadržava više detalja.
Praktičan efekat ove strategije je dobar. U testu, sesija sa 50 krugova razgovora posle kompresije pada sa 150k tokena na 80k, uz zadržavanje ključnih informacija. Agent i dalje razume dugoročnu nameru korisnika i ne "gubi pamćenje" usled kompresije.
Još jedan detalj: kompresija je inkrementalna. Ne kompresuje se svaki put cela istorija, već samo novi deo. Tako je overhead mali i ne usporava odziv.
07. Swarm: saradnja više Agenata
Složeni zadaci često zahtevaju saradnju više Agenata. Swarm modul OpenHarness-a pruža višeagentsku koordinaciju.
Možeš kreirati roditeljskog Agenta, a zatim izvesti pod-Agente za pod-zadatke:
# Roditeljski Agent razlaže i koordinira
parent = create_agent("project-manager")
# Izvođenje pod-Agente za konkretne zadatke
frontend_task = parent.spawn_subagent("frontend-dev", task="implementiraj login stranicu")
backend_task = parent.spawn_subagent("backend-dev", task="implementiraj login API")
# Čekanje završetka pod-zadataka
frontend_result = frontend_task.wait()
backend_result = backend_task.wait()
# Integracija rezultata
parent.integrate([frontend_result, backend_result])
Prompt:
Pročitajte izvorni kod trenutnog OpenHarness repozitorijuma i dajte mi vodič na srpskom za nove doprinosioce. Fokusirajte se na:
- Kako se pokreće
- Kako se koristi
- Kako radi Governance
- Kako radi Swarm / multi-agent
- Odakle krenuti u čitanju izvornog koda
Zasnovano na izvornom kodu, ne samo ponavljajte README; poželjno je paralelno koristiti više agenata za čitanje i sumiranje.Svaki pod-Agent ima nezavisan kontekst i set alata, bez međusobnog ometanja. Roditeljski Agent može pratiti status izvršenja pod-Agenata i po potrebi intervenisati.
Ovaj model roditelj-dete je vrlo koristan u realnom razvoju. Na primer, razvijaš novu funkciju — roditeljski Agent analizira zahteve i razlaže zadatak, a zatim izvodi specijalizovane pod-Agente za frontend, backend, bazu i dr. Svaki pod-Agent je fokusiran na svoje područje, što daje veću efikasnost i bolji kvalitet.
Roditeljski Agent upravlja i zavisnostima. Ako backend API još nije gotov, frontend Agent ne može da počne povezivanje. OpenHarness automatski obrađuje ove zavisnosti i obezbeđuje da zadaci idu pravim redosledom.
Tim OpenHarness-a takođe radi na ClawTeam integraciji, koja će u budućnosti podržati jače koordinacione sposobnosti tima, uključujući prosleđivanje poruka između Agenata, deljenje stanja i dinamičko balansiranje opterećenja.
Principi raspoređivanja zadataka u Swarm-u
Swarm nije običan pool procesa; on implementira kompletan distribuirani sistem raspoređivanja zadataka.

Razlaganje zadataka: kada roditeljski Agent primi složen zadatak, prvo ga razlaže. Razlaganje nije prosta podela stringova, već je zasnovano na razumevanju zadatka. Roditeljski Agent analizira koje module zadatak obuhvata, kakve su zavisnosti između modula, šta može paralelno, a šta mora sekvencijalno.
Alokacija resursa: pri kreiranju svakog pod-Agenta dodeljuje se nezavisan kontekst resursa. To obuhvata nezavisnu istoriju razgovora, nezavisne dozvole alata i nezavisan Memory prostor. Ova izolacija obezbeđuje da pod-Agenti ne ometaju jedni druge; greška jednog ne utiče na ostale.
Sinhronizacija stanja: status izvršenja pod-Agenata se realno sinhronizuje sa roditeljskim Agentom. Roditeljski Agent vidi trenutni korak svakog pod-Agenta, utrošak tokena i procenjeni preostali vreme. Ako se neki pod-Agent zaglavi, roditelj može intervenisati — prilagoditi parametre, preraspodeliti zadatak ili ga prekinuti.
Spajanje rezultata: po završetku pod-zadataka, roditeljski Agent spaja rezultate. Spajanje nije prosta konkatenacija stringova, već semantička integracija.
Roditeljski Agent analizira odnose među rezultatima, rešava konflikte, dopunjava nedostajući kontekst i generiše konzistentan konačan izlaz.
Oporavak od grešaka: ako neki pod-Agent ne uspe, Swarm ima nekoliko strategija: retry (ponovo izvesti Agenta za isti zadatak), povlačenje (opozvati završene pod-zadatke i proglašavati sve neuspešnim), kompenzacija (neka drugi Agent preuzme neuspešni zadatak). Strategija se konfiguriše pri kreiranju Swarm-a.
Ovaj dizajn omogućava Swarm-u da obradi vrlo složene zadatke. Na primer, refaktor velikog projekta sa desetinama fajlova — Swarm automatski razlaže, paralelno obrađuje, koordinira zavisnosti i spaja rezultate, a celokupan proces je transparentan za korisnika.
ending
OpenHarness mi pokazuje nove mogućnosti open-source Agent framework-a.
Za developere koji žele da nauče o Agentima, OpenHarness je odlična polazna tačka. Količina koda je umerena, arhitektura jasna, funkcije potpune.
Za timove koji žele da izgrade sopstveni Agent proizvod, OpenHarness nudi osnovu. Može se na njega nadograditi UI, priključiti sopstveni model, integrisati interne alate i brzo izgraditi Agent koji odgovara biznis potrebama.

Razvoj tehnologije uvek ide ovako: prvo velike kompanije naprave impresivan proizvod i dokažu da je pravac ispravan. Zatim open-source zajednica krene i demokratizuje sposobnosti, da svaki programer može da ih koristi.
OpenHarness radi upravo to.
[Prava demokratizacija tehnologije nije omogućiti svakome da koristi najbolji proizvod, već omogućiti svakome da izgradi proizvod koji mu treba.]
Vidimo se u sledećem!
