[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-79081":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":12,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":14,"stars30d":15,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":16,"rankGlobal":9,"rankLanguage":9,"license":17,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":20,"hasPages":18,"topics":21,"createdAt":9,"pushedAt":9,"updatedAt":30,"readmeContent":31,"aiSummary":32,"trendingCount":14,"starSnapshotCount":14,"syncStatus":33,"lastSyncTime":34,"discoverSource":35},79081,"engram","NanoFlow-io\u002Fengram","NanoFlow-io","🧠 Hybrid long-term memory plugin for OpenClaw agents — SQLite+FTS5 for structured facts, LanceDB for semantic recall",null,"TypeScript",120,1,119,0,8,0.9,"MIT License",false,"main",true,[22,23,24,25,26,27,28,29],"ai-agents","embeddings","lancedb","memory","openclaw","rag","sqlite","typescript","2026-06-12 02:03:49","# Engram\n\n```\n   ███████╗███╗   ██╗ ██████╗ ██████╗  █████╗ ███╗   ███╗\n   ██╔════╝████╗  ██║██╔════╝ ██╔══██╗██╔══██╗████╗ ████║\n   █████╗  ██╔██╗ ██║██║  ███╗██████╔╝███████║██╔████╔██║\n   ██╔══╝  ██║╚██╗██║██║   ██║██╔══██╗██╔══██║██║╚██╔╝██║\n   ███████╗██║ ╚████║╚██████╔╝██║  ██║██║  ██║██║ ╚═╝ ██║\n   ╚══════╝╚═╝  ╚═══╝ ╚═════╝ ╚═╝  ╚═╝╚═╝  ╚═╝╚═╝     ╚═╝\n\n           hybrid long-term memory for OpenClaw agents\n```\n\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-yellow.svg)](https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT)\n[![OpenClaw](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FOpenClaw-plugin-purple)](https:\u002F\u002Fopenclaw.ai)\n\n> **engram** *(n.)* — the physical\u002Fbiochemical trace a memory leaves behind. The thing that makes \"remembering\" actually possible.\n\nEngram is a memory plugin for [OpenClaw](https:\u002F\u002Fopenclaw.ai) agents. It gives them a brain that doesn't forget between sessions — backed by **SQLite + FTS5** for exact, structured recall and **LanceDB** for fuzzy semantic search over embeddings.\n\n## ✨ Features\n\n- 🧠 **Hybrid recall** — structured key\u002Fvalue facts + semantic vector search, queried together\n- 🔍 **FTS5 full-text search** over fact text\n- 📚 **Categories** — `preference`, `fact`, `decision`, `entity`, `other`\n- ⏳ **Decay classes** — `permanent`, `stable`, `active`, `session`, `checkpoint` (with confidence decay)\n- 🪝 **Auto-capture \u002F auto-recall** hooks (configurable)\n- 💾 **Local-first** — your memory stays on your machine\n- 🔒 **Embeddings via OpenAI** (`text-embedding-3-small` or `-large`)\n\n## 🚀 Install\n\nOne-liner (clones from this repo, copies the plugin into OpenClaw, wires the config):\n\n```bash\ncurl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002FNanoFlow-io\u002Fengram\u002Fmain\u002Fscripts\u002Finstall.sh | bash\n```\n\nOr clone and run manually:\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FNanoFlow-io\u002Fengram.git\ncd engram\nbash scripts\u002Finstall.sh\n```\n\nAfter install:\n\n```bash\nexport OPENAI_API_KEY=\"sk-proj-...\"   # if not already set\nopenclaw gateway restart\n```\n\nVerify it loaded — look for `engram: initialized` in the gateway log.\n\n## 🧪 Try It\n\nFrom inside an OpenClaw agent session:\n\n```\n> Remember that I prefer dark mode and my coffee black.\n```\n\nNext session:\n\n```\n> What do you remember about me?\n```\n\nThe agent recalls via the `memory_recall` \u002F `memory_store` tools, both backed by Engram.\n\n## ⚙️ Configuration\n\nEngram is configured under `plugins.entries.engram` in `~\u002F.openclaw\u002Fopenclaw.json`:\n\n```json\n{\n  \"plugins\": {\n    \"slots\": { \"memory\": \"engram\" },\n    \"entries\": {\n      \"engram\": {\n        \"enabled\": true,\n        \"hooks\": { \"allowConversationAccess\": true },\n        \"config\": {\n          \"embedding\": {\n            \"apiKey\": \"${OPENAI_API_KEY}\",\n            \"model\": \"text-embedding-3-small\"\n          },\n          \"autoCapture\": true,\n          \"autoRecall\": false,\n          \"sqlitePath\": \"~\u002F.openclaw\u002Fmemory\u002Ffacts.db\",\n          \"lanceDbPath\": \"~\u002F.openclaw\u002Fmemory\u002Flancedb\"\n        }\n      }\n    }\n  }\n}\n```\n\n| Field | Default | Notes |\n|---|---|---|\n| `embedding.apiKey` | — | required (use `${OPENAI_API_KEY}`) |\n| `embedding.model` | `text-embedding-3-small` | or `text-embedding-3-large` |\n| `autoCapture` | `true` | extract memories from conversations |\n| `autoRecall` | `false` | inject relevant memories into context. Off by default — can be noisy. |\n| `sqlitePath` | `~\u002F.openclaw\u002Fmemory\u002Ffacts.db` | structured store |\n| `lanceDbPath` | `~\u002F.openclaw\u002Fmemory\u002Flancedb` | vector store |\n\n## 🛠 CLI\n\nEngram registers a `engram` CLI command with subcommands:\n\n```bash\nopenclaw engram stats          # show fact\u002Fvector counts\nopenclaw engram prune          # remove expired memories\nopenclaw engram checkpoint     # manual checkpoint\nopenclaw engram backfill-decay # backfill decay classes on legacy data\nopenclaw engram extract-daily  # extract from daily notes\nopenclaw engram search \u003Cq>     # hybrid search\nopenclaw engram lookup \u003Ckey>   # exact lookup\n```\n\nVerify after install:\n\n```bash\nopenclaw plugins doctor\nopenclaw plugins inspect engram --runtime\n```\n\n## 🧱 Architecture\n\n```\n                    ┌─────────────────────┐\n                    │   OpenClaw Agent    │\n                    └──────────┬──────────┘\n                               │\n                ┌──────────────┴──────────────┐\n                │       Engram Plugin         │\n                └──────┬───────────────┬──────┘\n                       │               │\n            ┌──────────▼─────┐  ┌─────▼─────────┐\n            │  SQLite + FTS5 │  │   LanceDB     │\n            │  structured    │  │   vectors     │\n            │  facts, keys,  │  │   semantic    │\n            │  categories    │  │   recall      │\n            └────────────────┘  └───────────────┘\n                       ▲               ▲\n                       └──────┬────────┘\n                              │\n                       ┌──────▼──────┐\n                       │  OpenAI     │\n                       │ embeddings  │\n                       └─────────────┘\n```\n\nEvery memory gets written to **both** stores. Recall queries hit both and merge results by relevance.\n\n## 🗑 Uninstall\n\n```bash\nbash scripts\u002Funinstall.sh\n```\n\nAsks before wiping memory data.\n\n## 🤝 Contributing\n\nPRs welcome. Open an issue if you want to discuss architecture changes first.\n\n## 📜 License\n\nMIT © NanoFlow\n\n---\n\n```\n   ░░░ remember everything. forget nothing. ░░░\n```\n","Engram 是一个为 OpenClaw 代理设计的混合长期记忆插件，它结合了 SQLite + FTS5 用于结构化事实存储和 LanceDB 用于语义召回。其核心功能包括结构化键值事实与语义向量搜索相结合的混合回忆、FTS5 全文搜索以及多种记忆类别和衰减类别的支持。此外，该插件还提供了自动捕获\u002F自动回忆钩子，并且优先考虑本地存储以确保数据隐私。Engram 适用于需要增强代理记忆能力的应用场景，如个性化服务、持续对话系统等，通过 OpenAI 的嵌入模型进一步增强了语义理解能力。",2,"2026-06-11 03:57:25","CREATED_QUERY"]