Skip to main content
total-agent-memory — cover

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 daemon pokreće jedan server po direktorijumu memorije, a klijenti se povezuju preko tam proxy: prvi memory_recall u 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|markdown zadržava originalne vremenske oznake; tam export --encrypted prenosi 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 setup pita „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, a memory_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_recall i tam_save i 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_WORKERS pokreć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_answer mož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 sa MEMORY_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_answer sada 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=abstain vrać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_answer na 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, a kg_at pokazuje š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.