Memmy: VPS'te AI Ajanları İçin Yerel Bellek
Memmy ile AI ajanlarının ortak SQLite belleğini Ubuntu'da kaynak koddan kurun. Bellek hizmetini 18960 portunda çalıştırıp notları VPS dışına çıkarmayın.
Memmy nedir ve neleri depolar
Memmy, kendi VPS'nizde (sanal özel sunucunuzda) çalışan AI ajanları için yerel bir bellek merkezidir. Ajanlarınızın öğrendiği bilgileri tek bir SQLite veritabanında tutar. Sunucudaki her ajan aynı depodan okur ve bu depoya yazar. Proje memmy-agent tarafından yayımlanır, MIT lisansına sahiptir ve Temmuz 2026 itibarıyla 1.0.4 sürümündedir.
Bir sunucuda yalnızca bir bölümü önemlidir. Memmy, http://127.0.0.1:18960 üzerinde dinleyen bir bellek hizmeti, bu hizmetle iletişim kuran memmy-memory komut satırı arabirimi (CLI) ve bir masaüstü çalışma ortamı sunar. Çalışma ortamı yalnızca macOS ve Windows için paketlenmiştir. Bu nedenle Linux VPS üzerinde hizmeti ve CLI'yi çalıştırılır. Bu, Claude Code, Codex ve Cursor'a ortak bellek sağlamak için yeterlidir.
Memmy, depoladığı bilgileri dört katmana ayırır. L1 Trace ham etkileşimdir: istek, yanıt ve araç çağrıları. L2 Policy, yararlı olduğu kanıtlanan izlerden türetilen bir yordamdır. L3 World Model, bir proje veya ortam hakkındaki kalıcı bilgidir. Skill, bir policy'den somutlaştırılmış ve çağrılabilen bir yordamdır. Hizmet, bir etkileşimi içe aktarırken katmanı belirler. Bu nedenle katmanları el ile oluşturmanız gerekmez.
Araç başına bellekle karşılaştırıldığında paylaşılan bellek merkezinin değiştirdikleri
Günümüzde her agent kendi belleğini kullanıma sunar. Claude Code, yönerge dosyalarını repository içinde tutar. Cursor, kuralları çalışma alanı veritabanında tutar. Codex, oturum günlüklerini ~/.codex altında tutar. Her depo tek bir araca aittir. Bu nedenle bir araçta pazartesi günü öğretilen bilgi, salı günü başka bir araç tarafından bilinmez. Bunun maliyeti iki kez ödenir: aynı projeyi yeniden açıklamak için harcanan token'lar ve agent'ın başka bir yerde zaten düzeltilmiş bir varsayıma dayanarak yaptığı hatalı işlemler.
Bir merkez, depoyu araçtan çıkarır. Memmy ayrıca mevcut depoları da okur. Böylece boş bir veritabanıyla başlanmaz. Tarayıcı altı kaynağı tanır: ~/.claude/projects/**/*.jsonl konumundaki Claude Code, ~/.codex/sessions/<YYYY>/<MM>/<DD>/rollout-*.jsonl konumundaki Codex, ~/.local/share/opencode/opencode.db konumundaki OpenCode, Cursor'ın state.vscdb dosyaları, ~/.openclaw altındaki OpenClaw SQLite veritabanları ve ~/.hermes altındaki Hermes. Bir kaynağı adını ve yerel yolunu belirterek elle eklemek mümkündür.
İçe aktarma sayaçlarının aynı değerleri göstermemesi beklenen bir durumdur. Tarayıcı, iletileri kaynağa ve görüşmeye göre gruplandırır, ardından her tamamlanmış tur için bir L1 bellek yazar. Bir tur, boş olmayan kullanıcı içeriği içerdiğinde ve boş olmayan bir assistant ile sona erdiğinde tamamlanmış sayılır. Bu nedenle kesintiye uğrayan bir oturum herhangi bir katkı sağlamaz. İletiler, görüşme denetim noktaları ve kararlı tur kimlikleri kullanılarak yinelenenlerden arındırılır. Aynı çalıştırmada taranan ileti sayısı, içe aktarılan ileti sayısı ve yeni bellek sayısı birbirinden farklıdır.
Bu bölüm, Claude Code'un tek bir oturum içindeki bağlamı nasıl yönettiği konusunu tamamlar. Bağlam yönetimi, tek bir pencereye neyin sığacağını belirler. Bir bellek merkezi, bu pencere kapandıktan sonra neyin korunacağını belirler.
VPS üzerinde gerekenler
- Node.js 22 veya daha yeni bir sürüm. Memmy belgeleri bunu gerektirir. Ubuntu 24.04 ise Node 18'i içerir.
gitve bir derleme araç zinciri.better-sqlite3kurulum sırasında derlenebilen bir yerel modüldür.- Yaklaşık 2 GB RAM. root kurulumu büyük bir çalışma alanı ve bir frontend derleme zinciri indirir.
node_modulesve veritabanı için birkaç GB boş disk alanı.
sudo apt update
sudo apt install -y git build-essential python3 curl ca-certificates sqlite3
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs
node --versionnode --version çıktısı v22 veya daha yüksek olmalıdır. Buradaki v18 değeri, NodeSource adımının uygulanmadığını gösterir. Kurulum daha sonra projenin engine denetiminde başarısız olur.
Ubuntu 24.04 üzerinde Memmy'yi kaynak koddan yükleme
git clone https://github.com/MemTensor/memmy-agent.git
cd memmy-agent
cp .env.example .env
npm install
npm run memory:buildnpm run memory:build, @memmy/memory çalışma alanını Memory/dist içine derler. Başsız bir sunucu için ağaçtaki başka hiçbir şeyin derlenmesi gerekmez. Yerel modülün yüklendiğini doğrulayın:
node -e "require('better-sqlite3'); console.log('better-sqlite3 loads')"Bu satır çıktı vermek yerine hata oluşturuyorsa yerel modül Node sürümünüzle uyumlu değildir. Projenin kendi başlatma betiğinin herhangi bir şeyi başlatmadan önce yaptığı işlemin aynısı olan npm rebuild better-sqlite3 komutunu çalıştırın.
README, bash scripts/dev-start.sh komutunu tek komutla başlatma yöntemi olarak belgeler. Bu komutu başsız bir VPS üzerinde çalıştırmayın. Komut, bellek hizmetinin yanında Electron masaüstü kabuğunu ve 19000 portunda bir Vite geliştirme sunucusunu başlatır. Electron bir görüntüleme ortamı gerektirir. Bu nedenle grafik oturumu olmayan bir sunucuda betik takılır veya sonlanır.
Bellek hizmetini başlatma ve yanıt verdiğini denetleme
npm run memory:serve:devKaynak koddan bellek hizmetini çalıştırmanın belgelenmiş yolu budur. Hizmet 127.0.0.1:18960 adresine bağlanır, veritabanını ~/.memmy/memory-service/memory.sqlite konumunda tutar ve yapılandırmayı ~/.memmy/config.yaml konumundan okur. Değerleri açıkça belirtmek istediğinizde README aynı değerleri şu şekilde gösterir:
npm run memory:serve:dev -- \
--host 127.0.0.1 --port 18960 \
--db ~/.memmy/memory-service/memory.sqlite \
--config ~/.memmy/config.yamlİkinci bir kabukta, hizmetin çalışır durumda olup olmadığını denetleyin:
curl -sS http://127.0.0.1:18960/api/v1/healthHealth, hiçbir zaman token istemeyen tek uç noktadır. Bu nedenle doğru denetim noktasıdır. curl, 7 çıkış koduyla sonlanan ve Failed to connect to 127.0.0.1 port 18960 iletisi veren bir hata gösterirse hiçbir işlem portu dinlemiyordur. Hizmeti çalıştıran terminali inceleyin. Başlangıç sırasında oluşan çökmeler burada görüntülenir. Yaygın neden, yerel SQLite modülünün yüklenememesidir. Hizmet çalışmaya başladıktan sonra ss -lntp | grep 18960 soketi doğrular.
HTTP API'sinin (uygulama programlama arayüzü) geri kalanı /api/v1 altında bulunur.
POST /api/v1/memory/addbir bellek kaydı yazar,POST /api/v1/memory/searchise sorgular.GET /api/v1/memory/:idbir girdiyi okur,DELETE /api/v1/memory/:idise kaldırır.POST /api/v1/sessions/openvePOST /api/v1/sessions/:sessionId/closebir aracı oturumunun başlangıcını ve bitişini belirler.POST /api/v1/turns/startvePOST /api/v1/turns/:turnId/completebir turu kaydeder.GET /api/v1/panel/overview,/api/v1/panel/analysisve/api/v1/panel/itemskontrol paneline veri sağlar.
Memmy bir bağlantı noktası bloğu ayırır. Arayüzsüz kullanımda yalnızca ilk bağlantı noktası kullanılır: bellek için 18960, ağ geçidi durum denetimi için 18970, web arayüzü ve yönetim HTTP'si için 18980, memmy serve tarafından başlatılan OpenAI uyumlu API için 18990, masaüstü ön ucunun geliştirme sunucusu için de 19000 ve 19010. Sisteminizde bunlardan birini kullanan başka bir işlem varsa bakılacak yer bu listedir.
memmy-memory komutunun gerçekte kaynağı
İlk kurulum genellikle burada hatalı yapılır. Bu nedenle tahmin etmek yerine bilgiyi paketten alın. Komut adı depo adıyla ilişkili değildir. Komut, onu tanımlayan çalışma alanının bin alanından gelir:
node -p "JSON.stringify(require('./Memory/package.json').bin)"Bu komut {"memmy-memory":"./dist/src/cli/index.js"} bilgisini yazdırır. Bu nedenle oluşturulan giriş noktası Memory/dist/src/cli/index.js olur. Bu dosya yalnızca npm run memory:build sonrasında bulunur; çünkü derleme işlemi dist dosyasını oluşturur ve dosyayı çalıştırılabilir olarak işaretler. Dosyayı doğrudan çalıştırın:
node Memory/dist/src/cli/index.js healthKısa adı PATH üzerinde kullanmak isterseniz aynı dosyaya bağlantı oluşturun:
sudo ln -s "$PWD/Memory/dist/src/cli/index.js" /usr/local/bin/memmy-memory
memmy-memory healthCLI varsayılan olarak http://127.0.0.1:18960 değerini kullanır ve --url, --token, --config, --source ve --user-id seçeneklerini kabul eder. Alt komutları init, health, search, add, get ve delete komutlarıdır. Ayrıca kullanıcılar yerine aracılar tarafından kullanılan oturum ve tur çağrıları da vardır. memmy-memory search "deploy steps" ve memmy-memory add "staging migrates on deploy", bir aracının en sık çalıştırdığı iki komuttur.
Claude Code, Memmy'ye nasıl bağlanır?
Claude Code'da bellek eklentisi arayüzü yoktur; bu nedenle Memmy ona bağlanmaz. Entegrasyon bundan daha basittir. Claude Code, memmy-memory komutunu normal bir kabuk komutu olarak çalıştırır ve bir talimat dosyası, komutun ne zaman çalıştırılacağını belirtir. Memmy'nin belgelenen yükleyicisi bu dosyayı sizin için yazar: memmy-memory init --agent, hedef aracın kurallar dizinine bir bellek talimatı dosyası bırakır.
Talimatı bir kez elle yazın. Böylece araca tam olarak ne söylendiğini bilirsiniz. Claude Code, her oturumun başlangıcında proje kök dizinindeki CLAUDE.md dosyasını okur. Bu nedenle aşağıdaki gibi bir bölüm, entegrasyonun tamamı için yeterlidir:
## Memory
Before starting a task, run `memmy-memory search "<topic>"` and read what comes back.
When a task is done, run `memmy-memory add "<what you learned>"` for anything that will matter next session.Bunun ne sağladığını açıkça bilin. Bu, talimat düzeyinde bir entegrasyondur. Bu nedenle yalnızca model komutu çalıştırmaya karar verdiğinde çalışır. Çağrının yapılmasını zorlayan hiçbir mekanizma yoktur. Bir oturum add olmadan sona ererse hiçbir veri kaydedilmez. Bir sonraki aramada görülen tek belirti boş sonuçtur. Bu, Claude Code'un kendi bellek dosyaları ile aynı ödünleşimdir. Ancak bir fark vardır: depolama alanı paylaşılır. Bu nedenle not, aynı makinedeki Codex ve Cursor tarafından da kullanılabilir.
Tersi yönde herhangi bir kurulum gerekmez. Memmy'nin tarayıcısı, Claude Code'un oturum dökümlerini yazdığı ~/.claude/projects/**/*.jsonl dosyasını zaten okur. Memmy'yi tmux oturumunda Claude Code çalıştırdığınız sunucuda çalıştırın. Böylece dünkü çalışma, herhangi bir yapılandırma gerektirmeden belleğe dönüşür.
Memmy, Claude Code için MCP sunucusu olarak çalışır mı?
Hayır. Yönü bilmek zaman kaybını önler. MCP (model context protocol) istemcilerden ve sunuculardan oluşur. Memmy bir istemcidir. MCP sunucularına dışarıdan bağlanır ve bu sunucuların araçlarını kendi aracı çalışma zamanına sunar. claude mcp add öğesinin bağlanabileceği bir MCP uç noktası yayımlamaz. Depodaki tek MCP köprüsü, masaüstü yerel API'si içindeki Composio entegrasyonuna aittir. Bu API, kendi x-memmy-mcp-token başlığının arkasında 127.0.0.1 üzerinde rastgele bir portu dinler.
İstemci tarafı ~/.memmy/config.yaml içinde yapılandırılır. MEMMY_CONFIG dosyasının işaret ettiği konum olan tools.mcpServers altında bulunur:
tools:
mcpServers:
example:
type: stdio
command: npx
args:
- "-y"
- "your-mcp-server"
toolTimeout: 30
enabledTools:
- "*"type, stdio, sse ve streamableHttp değerlerini kabul eder. Bir stdio sunucusu, Memmy'nin alt işlemi olarak çalışır. Bu nedenle komutun aynı makinede bulunması ve aynı kullanıcı olarak çalışması gerekir. VPS üzerinde çalışan MCP sunucularını zaten kullanıyorsanız burada listelenmesi gerekenler bunlardır.
Bellek deposunu gizli tutma
Memmy'nin sahip olduğu her şey ~/.memmy altında bulunur: config.yaml, çalışma alanı, memory-service/memory.sqlite ve çalışma zamanı dosyaları. Tarama ve alma işlemleri yerel olarak gerçekleşir ve anılar yerel SQLite dosyasına yazılır. Bu nedenle varsayılan yapılandırma gerçekten yereldir.
Ağa erişen iki yol vardır. MEMMY_CLOUD_SERVICE varsayılan olarak https://memmy-api.memtensor.cn değerini kullanır ve deneme token'larıyla hesap modunu destekler. Bu nedenle API anahtarı modu burayı hiçbir zaman çağırmaz. Bellek iyileştirme programı, gizlilik ayarlarında bulunan ayrı bir seçenektir ve siz etkinleştirene kadar kapalıdır.
Fark edilmesi daha kolay olmayan üçüncü bir yol vardır. Barındırılan bir embedding sağlayıcısı yapılandırılırsa her belleğin metni, vektöre dönüştürülebilmesi için bu sağlayıcıya gönderilir. Yerel depolama bu durumda koruma sağlamaz. Bunu tamamen engellemenin tek yolu, embedding endpoint'ini kendiniz barındırmaktır.
18960 portunu loopback adresinde tutun. Buna bir firewall kuralı gerekmez, çünkü 127.0.0.1 adresine bağlanan bir hizmete makine dışından erişilemez. Hizmete laptop üzerinden SSH ile erişin:
ssh -N -L 18960:127.0.0.1:18960 you@your-vpsHizmeti daha geniş bir adrese bağlarsanız önce bir token ayarlayın. Yapılandırmada storage.token değerinin veya MEMMY_MEMORY_TOKEN ya da MEMORY_SERVICE_TOKEN ortam değişkeninin ayarlanması, health dışındaki her endpoint için bearer token gerektirir. Yapılandırma değerleri ${ENV_NAME} başvurularını destekler. Böylece token ve model API anahtarları dosyanın dışında tutulur. Bu, başka yerlerde gizli bilgileri AI agent'larından uzak tutma alışkanlığıyla aynıdır. Varsayılan deny ufw politikası da gelecekteki bir sürümün varsayılan bind adresini değiştirmesi durumunda ek koruma sağlar.
Güvenmeden önce ~/.memmy yedeğini alın
memory.sqlite, veri deposunun tamamıdır. Vektörler aynı dosyada sqlite-vec uzantısı üzerinden tutulur. Bu nedenle yedek tek bir dosyadan oluşur. Hizmet dosyaya yazarken cp ile kopyalamak, bölünmüş bir veritabanı oluşturabilir. SQLite'ın kendi yedekleme komutunu kullanın:
mkdir -p ~/memmy-backup
sqlite3 ~/.memmy/memory-service/memory.sqlite ".backup '$HOME/memmy-backup/memory.sqlite'"Bu işlem, hizmet çalışmaya devam ederken tutarlı bir kopya oluşturur. Kopyayı bir zamanlamaya göre sunucu dışına aktarın. site dışı depolama için restic bunun için kullanılır. config.yaml kaybedilirse sağlayıcı ayarları yeniden yazılabilir. memory.sqlite kaybedilirse tüm anılar kaybedilir. Makinede bunların ikinci bir kopyası bulunmaz.
Bellek hizmeti systemd altında çalıştırma
Bir kabukta çalışan npm run memory:serve:dev, kabukla birlikte sonlanır. Birim dosyası, hizmetin yeniden başlatmalar arasında çalışmaya devam etmesini sağlar.
[Unit]
Description=Memmy memory service
After=network-online.target
[Service]
Type=simple
User=memmy
WorkingDirectory=/opt/memmy/memmy-agent
EnvironmentFile=/etc/memmy/memory.env
ExecStart=/usr/bin/npm run memory:serve:dev
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.targetToken değerini birim dosyasına koymayın. Bu değeri root kullanıcısına ait ve izinleri 600 olan /etc/memmy/memory.env içine koyun:
MEMMY_CONFIG=/home/memmy/.memmy/config.yaml
MEMMY_MEMORY_TOKEN=replace-this-with-a-long-random-stringsudo systemctl daemon-reload
sudo systemctl enable --now memmy-memory
systemctl status memmy-memory --no-pager
curl -sS http://127.0.0.1:18960/api/v1/healthDurum çıktısında status=203/EXEC görünmesi, systemd'nin ExecStart dosyasını hiç çalıştıramadığı anlamına gelir. Bu nedenle which npm değerini kontrol edin. NodeSource kurulumunda bu değer /usr/bin/npm olur. nvm kurulumunda ise kullanıcının ana dizini altında bir konum olur. systemd bu konumu bulamaz. Hemen başlatılıp sonlanan birim, npm içinde başarısız olmuştur. journalctl -u memmy-memory -n 50 başarısızlığın nedenini gösterir. İşleyiş, VPS üzerindeki diğer systemd hizmetleriyle aynıdır.
Memmy henüz ne yapmıyor
- Linux masaüstü derlemesi yoktur. Paketleme betikleri macOS ve Windows'u kapsar. Bu nedenle workbench, onboarding wizard ve memory dashboard sunucunun kendisinde kullanılamaz.
memory:serve:dev, TypeScript giriş noktasını bir geliştirme yolu olantsxüzerinden çalıştırır. Depoda derlenmiş çıktı içinmemory:servede bulunur. Kullandığınız checkout'ta hangi betiklerin gerçekten bulunduğunu görmek içinnpm runkomutunu bağımsız olarak çalıştırın.- Retrieval, arama penceresini en yeni 2,000 vector satırından oluşturur. Ardından bu pencere içinde Top-K seçimi uygular. Çok büyük bir store üzerinde eski bir memory bu pencerenin dışında kalabilir.
- Embedding, capture işleminden sonra yapılır. Hata, agent'ın turn işlemini engellemek yerine retry queue'ya gönderilir. Az önce eklenen bir memory, vector search ile henüz bulunamayabilir.
- Tek bir SQLite dosyası tek bir node anlamına gelir. Clustering yoktur. Bu nedenle ikinci bir sunucu, ayrı bir memory anlamına gelir.
Temmuz 2026 itibarıyla Version 1.0.4 ve yaklaşık 329 star, projenin henüz erken aşamada olduğunu gösterir. Flag'ler, path'ler ve script adları sürümler arasında değişebilir. Herhangi bir yerden, buna dahil olarak buradan kopyalanan bir komuta güvenmek yerine kendi checkout'ınızdaki bin alanını ve npm run çıktısını okuyun.
FAQ
Sağlık denetimi neden bağlantı reddedildi hatası döndürüyor?
18960 numaralı portu dinleyen hiçbir işlem yok. Failed to connect to 127.0.0.1 port 18960 içeren curl çıkış kodu 7, memory hizmetinin çalışmadığı veya başlangıçta sonlandığı anlamına gelir. Bu nedenle hizmetin başlatıldığı terminali veya journal kayıtlarını okuyun. En yaygın iki neden, Node sürümünüzle eşleşmeyen bir better-sqlite3 yerel modül ve 22 değerinin altındaki bir Node sürümüdür. İlk sorun npm rebuild better-sqlite3 ile giderilir. Hizmet çalışmaya başladıktan sonra soketi ss -lntp | grep 18960 ile doğrulayın.
Kaynak koddan derleme sonrasında memmy-memory komutu nereden gelir?
Depo adından değil, @memmy/memory çalışma alanı paketinin bin alanından gelir. Checkout dizininde node -p "JSON.stringify(require('./Memory/package.json').bin)" komutunu çalıştırın; komut {"memmy-memory":"./dist/src/cli/index.js"} çıktısını verir. Bu dosya yalnızca npm run memory:build işleminden sonra oluşturulur; çünkü derleme dist dosyasını oluşturur ve dosyayı çalıştırılabilir olarak işaretler. Dosyayı node Memory/dist/src/cli/index.js health olarak çalıştırın veya kısa ad için /usr/local/bin içine sembolik bağlantı oluşturun.
claude mcp add ile Memmy'yi Claude Code'a ekleyebilir miyim?
Hayır. Memmy bir MCP istemcisidir, MCP sunucusu değildir. ~/.memmy/config.yaml içindeki tools.mcpServers altında listelenen sunuculara dışarıdan bağlanır ve bu sunucuların araçlarını kendi çalışma zamanına sunar. Claude Code, Memmy'ye diğer yönden erişir: memmy-memory CLI'ını bir kabuk komutu olarak çalıştırır. Bu işlem, memmy-memory init --agent tarafından aracının kurallar dizinine yazılan bir talimat dosyasıyla yönlendirilir.
Memmy'yi çalıştırmak anılarımı bir bulut hizmetine gönderir mi?
Tarama ve içe aktarma işlemleri yerel olarak yürütülür. Anılar, kendi diskinizdeki ~/.memmy/memory-service/memory.sqlite konumuna yazılır. MEMMY_CLOUD_SERVICE, hesap modu ve deneme belirteçleri için https://memmy-api.memtensor.cn konumunu gösterir. Bellek iyileştirme programı, siz etkinleştirene kadar kapalı kalır. İzlenmesi gereken bileşen embedding sağlayıcısıdır. Barındırılan bir embedding modeli, vektöre dönüştürdüğü her anının metnini alır. Bu durum önemliyse kendi çalıştırdığınız bir uç nokta kullanın.