Stash - Yapay zeka ajanları için kalıcı bellek katmanı
(alash3al.github.io)- Oturum değişse bile konuşma ve görev bağlamını sürdüren bir kalıcı bellek katmanı; ham gözlemleri episode olarak kaydedip bunları yapılandırılmış bilgiye dönüştürerek biriktirir
- Modelden bağımsız mimari kullanır; Claude, GPT, yerel LLM'ler ve özel ajanların aynı bellek katmanına bağlanmasını sağlar, altyapı olarak PostgreSQL ve pgvector üzerinde çalışır
- RAG'den farklı bir rol üstlenir; belge aramayla sınırlı kalmaz, konuşmalardan yeni olgular, ilişkiler, hedefler, başarısızlıklar ve hipotezler biriktirir; RAG ile birlikte de kullanılabilir
- Namespace ve hiyerarşik yollarla kullanıcı, proje ve ajanın öz-bilgisi ayrılır; consolidation pipeline ile facts, relationships, causal links, patterns, contradictions sürekli sentezlenir
- MCP yerel entegrasyonu,
/selftabanlı öz-model ve yinelenen araştırma döngülerini içererek belleği olmayan oturumluk ajanları uzun vadeli sürekliliğe sahip iş aktörlerine dönüştürmeyi amaçlar
Stash genel bakış
- AI ajanları ile dış dünya arasında yer alan bir kalıcı bellek katmanıdır; oturum değişse bile önceki bağlamın sürmesini sağlar
- Ham gözlemleri episodes olarak kaydeder ve bunları facts, relationships, patterns, goals, failures, hypotheses gibi yapılandırılmış bilgi biçiminde biriktirir
- Modelin kendisinin yerini almaz; sürekliliği güçlendirir ve Claude, GPT, yerel modeller gibi herhangi bir ajana bağlanabilecek şekilde tasarlanmıştır
- Depolama temeli olarak PostgreSQL + pgvector kullanır
- GitHub
Belleğin yapılandırılma biçimi
- namespace ile kullanıcı, proje ve ajanın öz-bilgisi gibi bellekler ayrılır
- Her namespace hiyerarşik yollardan oluşur;
/projectsokunduğunda/projects/stash,/projects/cartonagibi alt yollar da birlikte dahil edilir - Yazma işlemi yalnızca tek bir kesin namespace'e kaydedilir; böylece bellek kirlenmesi önlenir
- Kullanıcıyla ilgili bellek, proje belleği ve
/selfaltındaki öz-bilgi birbirine karışmadan korunur - Örnek yapı olarak
/users/alice,/projects/restaurant-saas,/projects/mobile-app,/self/capabilities,/self/limits,/self/preferencesverilir
RAG'den farkı
- RAG, belgelerden ilgili içeriği getiren bir erişim katmanına daha yakındır; konuşmanın kendisini hatırlamaz ve ondan öğrenmez
- RAG yalnızca belgelerde zaten bulunan içerikle çalışabilir; konuşmadan yeni bilgi üretemez
- Hedef takibi, niyet anlama, zaman içindeki çelişkileri tespit etme, neden-sonuç ilişkisi üzerine akıl yürütme RAG kapsamı dışında konumlandırılır
- Stash, konuşmalardan, kararlardan, başarılardan ve başarısızlıklardan otomatik öğrenir, zamanla bir bilgi grafiği oluşturur
- Belge arama ile deneyim belleği farklı problemleri çözdüğü için RAG ve Stash birlikte kullanılabilir
Mevcut AI belleğinden farkı
- Claude.ai ve ChatGPT'de de bellek vardır, ancak bu işlevler kendi platformlarına ve kendi modellerine bağlıdır
- Stash modelden bağımsız çalışır; yerel ve özel modellere de bağlanabilir
- Veri sahipliğini kullanıcı tarafında tutar ve açık kaynak olarak sunulur
- Arka plan consolidation, goals ve intent takibi, failures öğrenimi, causal reasoning, agent self-model gibi bileşenleri içerir
- Karşılaştırma tablosunda ChatGPT Memory ve Claude.ai Memory bir “not defteri”, Stash ise bir “zihin” olarak ayrıştırılır
Çözmeyi hedeflediği sorun
- Güncel AI modelleri akıl yürütmede iyi olsa da oturumlar arası hafızaları yoktur; bu yüzden kullanıcı her seferinde kendisini ve proje bağlamını yeniden anlatmak zorunda kalır
- Her seferinde uzun konuşma geçmişini prompt'a koymak yavaş ve pahalıdır; ayrıca context window sınırı devam eder
- Başarısız denemelerin sonraki oturumlarda tekrarlanmasını önleyecek bir ders aktarma mekanizması eksiktir
- Bellek özellikleri yalnızca bazı platformların özel işlevi olarak sunulduğu için özel ajanlar ve yerel LLM'ler bağlamsız şekilde sıfırdan başlamak zorunda kalır
Entegrasyon pipeline'ı
- Arka plan süreçleri deneyimleri sürekli sentezleyerek ham belleği yapılandırılmış bilgiye dönüştürür
- Episodes aşamasında gözlemler append-only biçimde kaydedilir
- Facts aşamasında episode kümeleri LLM ile sentezlenir
- Relationships aşamasında fact'ler arasındaki varlık ilişkileri çıkarılır
- Causal Links aşamasında fact'ler arasındaki neden-sonuç çiftleri bağlanır
- Patterns aşamasında daha yüksek seviyeli soyut örüntüler çıkarılır
- Contradictions aşamasında öz-düzeltme ve confidence decay uygulanır
- Goal Inference, etkin hedeflerle ilgili olguları otomatik olarak izler; ilerlemeyi ve çatışmaları görünür kılar
- Failure Patterns, yinelenen hataları tespit edip bunları yeni fact'ler olarak çıkarır; böylece aynı başarısızlıkların tekrarı azaltılır
- Hypothesis Scan, yeni kanıtların açık hipotezleri manuel müdahale olmadan doğrulamasını veya çürütmesini sağlar
MCP entegrasyonu
- MCP yerel olarak çalışır; Claude Desktop, Cursor, OpenCode, özel ajanlar, yerel LLM'ler ve diğer MCP istemcilerine bağlanabilir
- SDK olmadan bağlanabilir ve vendor lock-in olmadan her yerde aynı bellek katmanının kullanılmasını sağlar
- Toplam 28 araç sunar; remember, recall, forget, init'ten causal links, contradictions ve hypotheses'e kadar uzanır
./stash mcp execute --with-consolidationile stdio MCP sunucusu ve consolidation birlikte başlatılabilir./stash mcp serve --port 8080 --with-consolidationile uzak ajanlar için SSE sunucusu açılabilir
Ajan öz-modeli
initçağrısında/selfnamespace iskeleti oluşturularak öz-modelin kurulumu başlatılır/self/capabilitiesaltında ajanın iyi yaptığı işler hatırlanır ve görev planlamasında kullanılır/self/limitsaltında hata kayıtları ve zayıflıklar tutulur; böylece aynı hataların tekrarı engellenmeye çalışılır/self/preferencesaltında en iyi çalışan işletim biçimleri öğrenilir ve uzun vadede çalışma tarzı şekillenir
Otonom öğrenme döngüsü
- 5 dakikalık bir research loop çalıştırıldığında geçmiş bellekten mevcut bağlam çekilir, ajan kendi başına konu seçip araştırır, yeni bağlantılar kurar, yeniden birleştirir ve sonra durur
- Orient aşamasında geçmiş bağlam, etkin hedefler, açık hipotezler ve geçmiş başarısızlıklar çağrılır
- Research aşamasında ajan kendi seçtiği konu üzerinde web araması yapar
- Think aşamasında halihazırda bilinenler içindeki gerilimler, boşluklar ve çelişkiler açığa çıkarılır
- Invent aşamasında hipotez, örüntü ve keşif gibi yeni çıktılar üretilir
- Consolidate aşamasında pipeline çalıştırılarak ham episode'lar yapılandırılmış bilgiye dönüştürülür
- Reflect + Sleep aşamasında oturum özeti bırakılır, bir sonraki çalıştırma için bağlam ayarlanır ve süreç durur
- Döngü prompt'unu görüntüle
Model ve altyapı uyumluluğu
- Hem embedding hem reasoning için OpenAI uyumlu API kullanan tek bir provider yapılandırması varsayılır
- Bulut, yerel ve self-hosted kurulumları desteklediğini ve vendor lock-in olmadığını belirtir
- OpenRouter'ın yerelde bağlı kullanıldığı, yüzlerce modele tek bir API anahtarıyla erişim sağladığı belirtilir
- Ollama ile de doğrudan çalışır; Qwen, Llama, Mistral gibi yerel modellerle çevrimdışı bellek kurulumu mümkündür
- vLLM, LM Studio, llama.cpp server, Together AI, Groq gibi OpenAI API biçimini kullanan arka uçlar da desteklenir
- Varsayılan embedding modeli
openai/text-embedding-3-small'dır ve bu kombinasyondaSTASH_VECTOR_DIM=1536kullanılır STASH_VECTOR_DIMyalnızca ilk çalıştırmadan önce ayarlanabilir; başlatmadan sonra değiştirilirse tüm veritabanının sıfırlanması gerekir
Dağıtım ve kullanım bilgisi
- Docker Compose ile Postgres, pgvector ve Stash'ı birlikte ayağa kaldıran bir yapı sunulur
- Çalıştırma süreci; depoyu clone etmek,
.env.exampledosyasını.envolarak kopyalamak, ardından API anahtarı ile modeli ayarlayıpdocker compose upçalıştırmak şeklinde 3 adımda anlatılır - İlk çalıştırmadan sonra postgres + pgvector hazırlığı, migration'ların uygulanması, MCP sunucusunun beklemesi ve arka planda consolidation'ın çalışması beklenir
- Proje Apache 2.0 lisansı ile yayımlanır
- GitHub Repository
- alash3al.com
1 yorum
Hacker News yorumları
Sonunda Claude.ai bellek sistemi gibi bir şeyi taşınabilir hale getirmişler sanıp tıkladım, ama hiç öyle değilmiş
Buradaki şey sadece
store/rememberyaklaşımı; bence daha iyi olan, arka plandaki modelin sohbet geçmişini özetleyip bellek oluşturmasıO tarafta modelin belleği doğrudan yazması gerekmiyor, bu yüzden çok daha iyi çalışıyordu; bu nedenle bunu Claude.ai ile aynı seviyede tanıtmak biraz misleading görünüyor
Ben de LibreChat gibi bir şeye geçmek için aynı tarz bir bellek sistemini sürekli arıyorum ama henüz bulamadım; şu an Claude.ai’de kalmamın neredeyse tek nedeni bu özellik
Bu arada o sistem sadece Claude.ai’de var, Claude Code’da yok
autoDreamdiye bir şey varmış ve burada background memory consolidation engine olarak açıklanıyor: https://kuber.studio/blog/AI/Claude-Code's-Entire-Source-Code-Got-Leaked-via-a-Sourcemap-in-npm,-Let's-Talk-About-itBenim deneyimim tam tersi; https://github.com/flippyhead/ai-brain projesini esasen kendim için yaptım, birkaç arkadaşım da kullanıyor
Şimdiye kadar
CLAUDE.mdüzerinden yapay zekaya ilgili anıları buldurup, ne zaman ve nasıl saklayacağını düşündürtmek oldukça iyi işlediBu yöntem önceliğe göre yapı kurabiliyor ve gelecek için notlar bırakabiliyor; bu yüzden sadece her şeyi özetlemekten epey farklı hissettiriyor
Bellek oluşturma için tool call da oldukça iyi iş görüyor; bağlam sıkıştırması sırasında otomatik olarak bellek üretmek de bence fena değil
Ama otomatik üretim olacaksa eşzamansız consolidation gerekir; buna dreaming demek biraz abartı gibi geliyor
Benim implementasyonum Elroy.bot’ta; farklı yaklaşımları da burada derledim: https://tombedor.dev/approaches-to-agent-memory/
Arka planda bellek çıkarınca, bunu prefix cache ile uyumlu hale getirmek zor oluyor
Basit bir iki aşamalı
LOG.md(işlerin ve çıkarılan derslerin ayrıntılı günlüğü) +MEMORY.md(günlük budandığında terfi ettirilen maddelerin kaydı) + tur sonunda çalışan bir stop hook bile oldukça ileri götürebilirKullanıcıyla konuşan ajanın arkasında yardımcı ekipler varmış da, konuşmayı dinleyip önemli gerçekleri not ediyor ya da veritabanında ilgili bilgileri arayıp
bu X belleği alakalı görünüyordiye araya giriyorlarmış gibi hissettiriyorToken’lar bedava olsa kolay görünürdü, ama bunu verimli hale getirmek oldukça ilginç bir problem
Nasıl implement edildiğini neredeyse hiç açıklamadan bir şeyler vaat eden projeler bana hep büyük bir red flag gibi gelir
Biraz daha kazıyınca aslında
pg_vectorüzerinemcpverecall/rememberadlı iki fonksiyon eklenmiş bir yapı çıkıyorSonuçta bu daha çok RAG’e yakın; veri yapısının önemli olduğu söylenebilir ama şimdiye kadar çıkan bu tür bellek sistemlerinin neredeyse hepsi benzer şekilde çalıştı
Henüz temel bir vector DB search’ten daha iyi arama yaptığını kanıtlayan bir örnek görmedim
memoryyazıyor ve LLM’ler berbat ama bu ürün sihirli şekilde çözüyor gibi gösteriliyorEğer gerçekten bunu yapıyorsa, sonuçta sadece vectordb’nin iyi paketlenmiş bir hali sayılır
Bununla ilgili zaten bir inceleme var: https://zby.github.io/commonplace/agent-memory-systems/reviews/stash/
Diğer pek çok LLM memory system de burada toplanmış: https://zby.github.io/commonplace/agent-memory-systems/
Ve bu tür sistemlerden ne beklendiğini de burada yazmışlar: https://zby.github.io/commonplace/notes/designing-agent-memory-systems/
Bu agent memory systems hem aşırı tasarlanmış gibi geliyor hem de aynı anda yetersiz tasarlanmış; ayrıca biraz çıkmaz sokak gibi görünüyor
Güncel modellerin ihtiyaçlarından hızla kopmayacak ve çürümeyecek bir gerçeklik pek hayal edemiyorum
Örneğin bir kez ödeme özelliği yapıldı diye,
don't use stripegibi bir bellek yüzünden sonraki birçok oturumun gereksiz yere ödeme tarafına kayması mümkünTamamen unproven memory layer gibi; gerçek kullanım görüntüsü olmadan, şık bir pazarlama sitesine abartılı iddialar konmuş hissi veriyor
Varsayım basit: LLM zaten bildiğini bilmeye devam edecek, dolayısıyla LLM’in söylediklerini saklamıyorum; kodla ilgili şeyler de kodda ve yorumlarda kalmalı
Ama bunların dışında olup da yine de asla yakalanmayan şeyler var
Bir şey geliştirirken, fiilen yaptıklarınızdan çok yapmamaya karar verdikleriniz önemli olabiliyor; bu araç oturum sonunda elenen alternatifleri ve nedenlerini yakalayıp system knowledge olarak saklıyor
Sonuçta sadece kodda grep yaparak bulunamayacak, ekip arkadaşlarının kafasında kalan bilgiyi korumak istiyorum; şu ana kadar epey iyi çalışıyor ama daha erken
don't use stripegibi bir anı, ancak modele payment processing ile ilgili bir görev verildiğinde bağlama giriyorUzun süredir böyle bir şey arıyordum ve hesabın LLM patlamasından önce de yazılım yayımladığını görmek hoş
Yine de keşke projelere
LLM kullanım kaydıgibi bir şey eklenseLLM ile mi üretildi, üretildiyse ne kadar, hangi aşamalarda kullanıldı, çıktı ne kadar dikkatle incelendi, kalite açısından tek başına yapmaya göre en azından aynı mı ya da daha iyi mi görüldü; bunları bilmek güzel olurdu
Belirli bir kişiden şüphe etmek için değil, tüm projelerde ortak bir bilgi olarak görmek isterdim; ben de bunu yapmayı düşünüyorum
Kimse seni bu projeyi kullanmaya zorlamıyor; kodu açıp okuyabilir, inceleyebilir ve kullanıp kullanmayacağına kendin karar verebilirsin
Tasarımı ve testi neredeyse hiç yapmadığını, kod kalitesinin de düşük olduğunu dürüstçe kabul edecek çok kişi sanmıyorum
Hatta bu soruya yanıt vermeye çalışan üçüncü taraf bir sistem gerekebilir; tabii o da LLM tabanlı olursa epey öznel olabilir
Ben bu aralar çoğu projeyi bir dizi Markdown dosyası etrafında yürütüyorum; önce yapay zekayla araştırma yapıyor, plan çıkarıyor ve implementasyon ilerleyişini takip ediyorum
Geliştirmeyi plana göre aşamalı yapıyor ve her aşamada incelemeye devam ediyorum
İş akışımı belgele derseniz, o dosyalar zaten bunun kendisi
Kodun %99’u üretilmiş oluyor ama bunu benim tatmin olduğum şekilde ürettirmeye dikkat ediyorum; sonuç da çoğu zaman tek başıma yapacağımdan daha iyi geliyor
İyi yazılım da kötü yazılım da hem LLM’siz hem LLM’le üretilebilir
Bir marangozdan çekiç mi kullandığını yoksa nail gun mı kullandığını, çatıyla güvertede hangisini tercih ettiğini sormayız
Güvene dayalı bir temel yoksa, sonunda ya kaliteyi kendin doğrulaman gerekir ya da baştan kendin yaparsın; onun dışı biraz umutla karışık beklenti gibi
Hâlâ işe yarar bir memory bulamadım
Bir uçta
agents.mdgibi sadece üst düzey özet bırakan şeyler var; bunlarbu öğeyi değiştirirsen şu öğeyi draft olarak işaretlemelisingibi somut detaylarda pek işe yaramıyorÖbür uçta ise aşırı ayrıntılı yaklaşımlar var; detay o kadar fazla oluyor ki ya göz ardı ediliyor ya da bir özellik alanının ayrıntısı başka alanlardaki değişiklikleri kirletiyor
Sonuç olarak şimdiye kadar en iyi çalışan yöntem, belleksiz gidip sadece ilgili oturum/prompt için önemli bağlamı elle seçmek oldu
Bir deponun ne yaptığı ve ne yapması gerektiği konusunda gerçek source of truth sonuçta repo itself
Anlattığın şey daha çok kod inceleme yönergesi gibi; böyle şeyleri zaten değişiklik anında açıkça bağlama koyabilirsin
Bellek sistemi buna göre fazla karmaşık ve doğruluğu da daha düşük
Acaba bir gün bu modeller gerçekten continual learning kazanacak mı diye merak ediyorum
Zaten yeterince zekiler ama gerçek hafızaları olmadığından kullanması hantal geliyor
Bende birkaç basit şey oldukça iyi çalışıyor; araç olarak Codex kullanıyorum
Agent.mdiçindeki kodlama rehberine koyuyorumBenim functional spec’im ajan için
Project.mdişlevi görüyorAyrıca her agentic code review öncesinde proje dizin ağacını çıkarıp kod tabanıyla birlikte tek bir dosyada birleştiriyor, dosya adına da timestamp ekliyorum
Bu beklenmedik derecede önemli; LLM’in eski sürümlere referans verme ihtimalini azaltıyor ve git göndermeden hızlı diff bakmak için de işe yarıyor
Şimdiye kadar büyük ve karmaşık kod tabanlarında bile bu basit iş akışı oldukça iyi çalıştı
Token verimliliği kötü ama işe yarıyor
Her seferinde tüm kod tabanını birleştirmek gerekmiyor; bitmiş, test edilmiş ya da mevcut işle ilgisiz projeleri çıkarabiliyorum
Yine de printed directory tree içine koyuyorum, böylece ajan en azından onların varlığını biliyor ve gerekirse belirli dosyaları isteyebiliyor
Bu birleştirme işini nasıl yaptığını merak ediyorum
Elle mi yapıyorsun, sadece değişen dosyaları mı birleştiriyorsun, yoksa hibrit bir yöntem mi kullanıyorsun bilmek isterim
LLM memory teoride kulağa hoş geliyor ama pratikte büyüdükçe, belleksiz kullanım kadar dağınık hale geliyor
İlk ekrandaki örnekteki gibi
projem üzerinde çalışmaya devam etdeseniz bile, gerçekte çoğu kişi tek bir proje üzerinde çalışmıyorBellekte 5, 10 kadar proje olabilir ve kaydedildikleri sırada her birinin bir anlamı vardı
Sonunda yine
sass projesine devam etgibi daha spesifik olmanız gerekiyor; biraz detay bağlamı kazanırken bir yandan da LLM context dolduruyor ve ek MCP calls maliyeti çıkarıyorDüzgün yapılmış bir implementasyon bu sınırların ötesine geçebilir
Bu, yalnız çalışan vibecoder’lar içinmiş gibi geliyor
Gerçek insanlarla, gerçek projelerde çalışırken bu sistem tüm projenin belleğine sahip olamaz; benim de tümüne hâkim bir hafızam yok
Başka PR’lar merge edildiğinde elimdeki bilgi hemen eskiyor ve benim önemsediğim şey yalnızca kendi ticket’ım oluyor
Bu yüzden giderek bunun o tür işbirlikçi çalışma için bir araç olmayabileceğini düşünüyorum
Artık yazılım üretmenin maliyeti neredeyse sıfıra yaklaşmışken, hâlâ bunun gibi bir şeyi vibe-coded pazarlama sitesi ile satmaya çalışmaları şaşırtıcı
Kim bunu deneyip haftalarca, aylarca bekleyerek gerçekten çalışıp çalışmadığını görmek için zaman ayırabilir ki?
Sitede bunun RAG’den ya da sadece bellek dosyaları klasörü + grep yaklaşımından daha iyi olduğuna dair hiçbir kanıt yok
Buna rağmen her yerde fantastik iddialar var ve sayfa kaydırması bile 14fps takılıyor
Bu sanki 24 saat önce kodlanmış gibi duruyor; açıkçası fazla tembelce geliyor