Izabrani projekti
total-agent-memory totalmemory.dev
Trajna memorija za AI coding agente preko MCP-a — lokalno ili kao autentifikovani timski server sa ličnom, timskom i deljenom memorijom (v14.9.0).
- Python
- SQLite
- FastEmbed
- ChromaDB
- Ollama
- MCP
- Three.js
Problem
Coding agent bez memorije pita iste stvari svake sesije. I ponavlja iste greške. Context window nije memorija, to je radni skup. Vector store takođe nije memorija, to je Ctrl+F sa embeddings-ima.
Hteo sam nešto bliže senior inženjeru: epizodni recall (“probali smo prošlog utorka, nije radilo”), semantički (“u kompaniji logujemo u JSON”), decay, kontradikcije i pravo da kažem “ne znam”.
Arhitektura
- Leksička putanja: SQLite + FTS5 sa BM25 rangiranjem, plus fuzzy pretraga za greške u kucanju.
- Semantička putanja: FastEmbed embeddings (ONNX, bez PyTorch-a u osnovnoj instalaciji). Autoritet za pretragu je vektorsko skladište u SQLite-u; ChromaDB je ogledalo na strani upisa.
- Graph sloj: entiteti, relacije i temporalne činjenice, sa cognitive activation spreading.
- Fusion: rezultati se spajaju kroz Reciprocal Rank Fusion, zatim MMR pass za raznovrsnost.
- Re-rank: opcioni CrossEncoder / BGE reranker, instalira se kao zaseban extra i isključen je u podrazumevanom fast režimu.
Verzija 14.9.0 (2026-10-13)
- Memorija radi i kad je agent ne poziva. Pretragu, proveru pravila i čuvanje sada rade hook-ovi: svaki prompt dobija odgovarajuća pravila i kratak blok relevantnih zapisa (budžet 400 tokena, ograničenje 1,5 s, prompt se nikad ne blokira), novi PreToolUse hook prikazuje pravilo neposredno pre komande ili izmene na koju se odnosi, a na Stop se potez proverava prema pravilima prikazanim sesiji. Prompt kojim korisnik ispravlja agenta („već sam ti rekao…“) postaje nacrt uvida, a pravilo tek posle pravih glasova. Suspenzija pravila se sada oslanja samo na eksplicitne ocene; ranije je učitavanje pravila suspendovalo korisna posle deset startova sesije.
- Jedan topao server za sve klijente.
tam daemonpokreće jedan server po direktorijumu memorije, a klijenti se povezuju prekotam proxy: prvimemory_recallu sesiji traje 0,18 s umesto 1,51 s. Relativni datumi („prošlog meseca“, „pre tri nedelje“) sada daju pretrazi vremenski prozor, pitanja „šta je bilo ranije?“ stavljaju stariju vrednost na prvo mesto (0/48 → 48/48), a LongMemEval-S held-out je dostigao 88,0 na 400 pitanja. Rezultati. - Uvoz, izvoz, CI.
tam import chatgpt|claude|mem0|markdownzadržava originalne vremenske oznake;tam export --encryptedprenosi bazu između mašina kao AES-256-GCM paket. Katalog raste sa 77 na 79 alata, a svaki pull request pokreće ceo skup testova na Ubuntu, macOS i Windows sa Python 3.11–3.13.
Verzija 14.8.0 (2026-10-08)
- Svaki sloj pretrage izmeren, dva popravljena. Težine kojima se spajaju slojevi pretrage su sada podešavanje, a novi harness meri vrednost svakog sloja na LoCoMo, LongMemEval-S ili kopiji instalirane baze. Na kopiji autorove baze našao je sloj grafa koji nikada nije radio (čitao je tabelu u koju niko ne upisuje) i sloj reprezentacija koji je poredio upit sa proizvoljnim podskupom redova; oba su popravljena. Istih 150 upita: R@10 0,133 → 0,167, p50 pretrage 336 ms → 128 ms. Rezultati.
- Pitanja koja je rangiranje propuštalo. Pitanja za savet dodatno pretražuju konvencije projekta i favorizuju korisnikove sopstvene replike (preference pitanja LongMemEval-S: MRR 0,460 → 0,509);
session_endčuva rezime sesije kao zapis koji kasnije pretrage nalaze. - Operacije. Lanac rezervnih LLM provajdera, tako da zaustavljena Ollama više ne ostavlja redove obogaćivanja da ćutke čekaju, a satna refleksija sada konsoliduje neaktivne projekte na ličnim instalacijama. Šeme 77 alata su zakucane testom; plugin, hook-ovi i skill nisu menjani.
Verzija 14.7.0 (2026-09-30)
- Budžet konteksta se puni celim zapisima.
memory_recall(mode="context", fill_budget=true)pretražuje do 100 rezultata u dubinu i zadržava cele zapise, redom po rangu, dok se budžet znakova ne potroši, umesto da gornje rezultate seče na isečke. Kontekst češće sadrži tražene dokaze: LoCoMo 0,815 → 0,890 na 8.000 znakova, LongMemEval-S (sve tražene replike) 0,766 → 0,904 na 40.000. Podrazumevano isključeno. Rezultati. - AMA-Bench, ceo test skup. Kao memorija agenta na gpt-5-mini, TAM postiže 0,658 na 24 ćelije „domen × sposobnost“ svih 208 epizoda (sudija gpt-5.2); GPT-5 mini koji čita celu trajektoriju na objavljenoj tabeli postiže 0,656. Rezultat je prijavljen na rang-listu i smatra se samoprijavljenim dok ga tabela ne proveri. Metod i pokretanje.
Verzija 14.6.0 (2026-09-28)
- Memorijski server za kompaniju.
tam setuppita „Samo ja” ili „Server kompanije”. Timski server dobija veb kontrolnu tablu sa pozivnim kodovima, ulogama (član, šef odeljenja, posmatrač kompanije, superadmin), dnevnikom revizije i podešavanjima provajdera sa šifrovanim ključevima. Tu su i uvođenje novih zaposlenih po odeljenjima sa testovima, izveštaji o aktivnosti (memory_report) i offboarding. Svi podaci mogu da budu u PostgreSQL-u: na testu pariteta oba backend-a vraćaju isti top 10. - Podešavanja i privatnost za ličnu instalaciju. Lokalna kontrolna tabla ima stranicu podešavanja. API ključevi se čuvaju šifrovani i više se ne upisuju u konfiguracije klijenata. Tajni podaci se maskiraju na svim putevima upisa.
tam redact-existingčisti ono što su sačuvale starije verzije, amemory_delete(hard=true)briše zapis sa svim kopijama. - Plugin za Hermes Agent. hermes-tam-memory čini TAM izvornim provajderom memorije za Hermes Agent kompanije Nous Research. Plugin čuva svaki potez i pre sledećeg vraća relevantna sećanja. Dodaje
tam_recallitam_savei radi lokalno ili sa timskim serverom.
Verzija 14.5.1 (2026-09-24)
- Zapis ostaje ispod sopstvenog kasnijeg ažuriranja. Cross-encoder dodat u 14.5.0 znao je stvarnu vrednost i mogao je da je podigne iznad zapisanog ažuriranja („Windows Vista” → Microsoft iznad kasnijeg „Raytheon”). Posle ponovnog rangiranja, vrednosti iste tvrdnje sada idu od najnovije ka starijoj. Na MemoryAgentBench FactConsolidation najnovija vrednost je prva za 98 od 100 pitanja umesto 45; LoCoMo i LongMemEval se ne menjaju. Rezultati.
Verzija 14.5.0 (2026-09-23)
- Bez značajne razlike u odnosu na Mem0 Platform. Mem0 objavljuje odgovore iza svojih rezultata na LoCoMo i LongMemEval. Kada se ocene zajedno sa odgovorima total-agent-memory na istim izdvojenim pitanjima, pri čemu u svakoj konfiguraciji ocenjivanja oba sistema ocenjuje isti model sa istim promptom: LongMemEval-S 92,25 prema 91,00, LoCoMo 88,02 prema 88,46. Nijedna razlika nije statistički značajna na ovim pitanjima, što nije isto što i dokazana jednakost — uz pretragu koja radi lokalno i bez poziva LLM-a pri upisu ili pretrazi. Izveštaj i kako ga ponoviti.
- Potpuniji kontekst za model. Cross-encoder čita svakog kandidata zajedno sa susednim replikama, relativni datumi („prošlog četvrtka”) dobijaju datum koji označavaju, a budžet konteksta se deli po rangu, pa se dugačak najbolji zapis više ne skraćuje na odlomak.
Verzija 14.4.0 (2026-09-22, ušla u 14.5.0)
- Zapis može da povuče vrednost koju zamenjuje.
memory_save(supersede=true)označava kao zastarele ranije zapise istog projekta i tipa koji počinju istim rečima i završavaju se drugom vrednošću („državljanstvo je Argentina” → „… Jermenija”). Uključuje se eksplicitno, jer bi pravilo povuklo i „voli rok” kada stigne „voli džez”. Na MemoryAgentBench FactConsolidation (pitanja u jednom koraku) gpt-4o-mini raste sa 82 na 99 (6k) i sa 85 na 93 (262k). - Jeftiniji upis na milion zapisa. Čuvanje više ne tera keš vektora da ponovo učita sve: sledeća pretraga bez filtera po projektu traje 0,37 s umesto 4,2 s. Osvežavanje rečnika pojmova, koje je jednom u minuti zadržavalo čuvanje, sada traje 2,6 ms: 99. percentil čuvanja pao je sa 1,4 s na 0,14 s.
Verzija 14.3.1 (2026-09-21)
- Ažuriranja se više ne gube. 14.3.0 je skoro iste zapise smatrala ponavljanjem, pa je posle „Mesijevo državljanstvo je Argentina” i „… Armenija” ostajala Argentina; na MemoryAgentBench FactConsolidation gubilo se 36 od 455 činjenica. Sada je ponavljanje samo doslovno ista tvrdnja, i ono zamenjuje stari zapis, pa posle „A, B, pa opet A” trenutno važi A.
- Brzo i na milion zapisa. Pretraga u okviru projekta više ne usporava sa rastom cele baze: 25 ms umesto 781 ms na 100 hiljada zapisa, 105 ms umesto 6–64 s na milion (200 klijenata, jedna mašina).
MCP_HTTP_WORKERSpokreće više procesa HTTP servera na jednom portu za servise sa mnogo klijenata.
Verzija 14.3.0 (2026-09-21)
- Jev proverava kontradikcije.
memory_answermože da proveri pronađene činjenice na kontradikcije TypeSafe-ovim modelom Jev, koji ne generiše tekst nego odgovara na tipizovana pitanja verovatnoćama: svaki par činjenica je jedno pitanje, sve u jednom zahtevu. U poređenju sa proverom na Claude Haiku 4.5 na istim pitanjima, tačnost je ista (35 od 78 prema 36 na LongMemEval knowledge-update), provera se ubrzava sa 3,1 na 1,9 s, a Jev je naplatio $0,04 za svih 78 pitanja. Uključuje se saMEMORY_CONTRADICTION_SCORER=jev. - Pažljivije sa API ključem. Prazan ključ ili ključ sa kontrolnim znakovima odbija se pre slanja zahteva, a poruka o grešci ne sadrži ključ. Isti problem u zvaničnim TypeSafe SDK-ovima prijavio sam kao issue.
Verzija 14.2.0 (2026-09-21)
- Činjenice koje se menjaju tokom vremena.
memory_answersada odgovara poslednjom vrednošću: „Mary loves red”, sačuvano u maju, i „Mary no longer likes red; she has fallen for green”, sačuvano u avgustu, daju zelenu, ranije crvenu. Čitač vidi kada je svaki zapis sačuvan, a vrednost važi dok je kasniji zapis ne promeni. Na LongMemEval knowledge-update tačnih odgovora je 35 od 78 umesto 12 (Claude Haiku 4.5). - Kontradikcija se razrešava umesto odbijanja. Obe strane idu čitaču sa datumima;
MEMORY_CONTRADICTION_POLICY=abstainvraća odbijanje iz 14.1.0. Kontradikcija o nekom drugom više ne blokira odgovor. - Ruski oblici reči i jedan format vremena. „Маша” u pitanju pronalazi „Маше” u zapisu. Vreme se čuva u jednom UTC formatu, a stariji zapisi se konvertuju pri nadogradnji.
Verzija 14.1.0 (2026-09-21)
- Negativna pretraga u
memory_answer. Pre odgovora, druga pretraga traži činjenice koje bi opovrgle verovatan odgovor: mali model preokreće pitanje, a svaki par „za — protiv” (najviše 5 × 5) ocenjuje se jednim grupnim pozivom. Ocena 0,60 ili više vraća „Not enough information” umesto da bira stranu; od 0,30 do 0,60 odgovor ide uz napomenu. memory_answerna Anthropic-u i Ollami: oba provajdera sada vraćaju izlaz strogo po šemi, pa grounded reader više ne pada na JSON u markdown omotaču.
Verzija 14.0.0 (2026-09-15)
- Jedan autentifikovani server za ličnu, timsku i deljenu memoriju. Svaka oblast ima svoju bazu, graf i indeks; pretraga obuhvata sve oblasti kojima token ima pristup.
- Autorstvo i istorija revizija. Autor i klijent se uzimaju iz ličnog tokena; izmena pravi reviziju, a provera revizije sprečava da neko pregazi tuđu izmenu.
- Timski web interfejs za pretragu, pregled, čuvanje, izmene i istoriju.
- Udaljeni MCP most sa osam osnovnih alata; lokalni katalog ima 76 alata.
- Podesivi interni LLM provajderi: Ollama, OpenAI-kompatibilni endpoint-i ili Anthropic.
- Scoped retrieval i vektorska pretraga svesna modela: svaki embedding prostor se pretražuje sopstvenim modelom i dimenzijama; nekompatibilni sačuvani vektori se isključuju umesto da se tiho porede.
- Privatni write intents: privatne sekcije se uklanjaju pre upisa u trajni outbox.
- Opcioni grounded reader (
memory_answer) koji odbacuje kontradiktorne tvrdnje. Obična pretraga (recall) ga ne koristi.
Provere: CI release matrica je prošla — nativne instalacije na Ubuntu 24.04, Windows 2022, macOS 15 Intel i macOS 15 arm64 sa Python 3.11, 3.12 i 3.13, plus Docker Compose, browser testovi u Chromium / Firefox / WebKit, build paketa i ceo test suite iz izvorne arhive, gde prolazi 2.145 testova.
Ključne odluke
- Multi-representation skladište — zapis može biti embedovan kao sirovi tekst, sažetak, ključne reči, pitanja i kompresovani oblik; pretraga ide kroz sva predstavljanja.
- Self-extracting knowledge graph — entiteti i relacije se izvlače automatski, a fact merger razrešava kontradikcije.
- Temporalne činjenice — činjenice imaju
valid_from/valid_to, akg_atpokazuje šta je bilo tačno u datom trenutku. - Lokalni dashboard — uključuje 3D WebGL (Three.js) prikaz grafa znanja.
Merenja retrieval-a
Izmereno na 13.x i navedeno u README-u v14. Ovo je recall pretrage — da li je pravi dokaz u prvih pet — a ne tačnost odgovora:
- LongMemEval (javni,
longmemeval_s, 470 pitanja, v13.0.0, podrazumevani fast profil): recall@5 (any) = 95.1 %. - LoCoMo (1.536 pitanja): R@5 = 0.607.
- BEAM na skali 1M (625 proba): R@5 = 0.448.
Ne tvrdi se nikakav plasman u odnosu na druge memorijske proizvode.
Rezultati
MIT licenca, Python 3.11+, MCP-native. Radi kao lokalni stdio server za jednu osobu ili kao timski server iza HTTPS reverse proxy-ja. Radi sa Claude Code, Codex CLI, Cursor i drugim MCP klijentima, a sa Hermes Agent-om kroz plugin provajdera memorije. Verzija 14.6.0 objavljena je kao GitHub Release sa wheel-om i izvornom arhivom, na PyPI, kroz npm omotač 1.9.0, kao ghcr.io image za linux/amd64 i linux/arm64, u zvaničnom MCP Registry-ju i u Homebrew tap-u. Sajt proizvoda: totalmemory.dev.
Lekcije
- Recall je stack, ne servis. Leksička, semantička i graf pretraga promašuju različite stvari; dobitak dolazi iz njihovog fusion-a.
- Zaboravljanje je feature. Bez decay-a store se puni zastarelim činjenicama koje potiskuju aktuelne.
- Benchmark-e treba proveravati kao i kod. U 13.0.0 povukao sam raniju, višu LongMemEval cifru kada se pokazalo da je runner merio sopstveno samostalno rangiranje, a ne putanju kojom ide agent; cifre iznad dobijene su kroz pravi store i pretragu.