OmniMem
ทางการเซิร์ฟเวอร์ MCP ที่โฮสต์เอง ซึ่งช่วยให้ AI Agents มีหน่วยความจำถาวรข้ามเซสชัน โปรเจกต์ และเครื่องจักร
คุณทำอะไรได้บ้างด้วย OmniMem MCP?
มอบความทรงจำแบบถาวรและโฮสต์เองให้กับเอเจนต์ AI ของคุณ ข้ามเซสชัน โปรเจกต์ และเครื่องจักร — ขอให้มัน "ตรวจสอบสุสานก่อนที่จะแนะนำไลบรารีที่เคยล้มเหลวไปแล้ว"
- สรุปเซสชัน — ขอ
briefingเพื่อรับบริบทของโปรเจกต์ สถิติประสบการณ์ ความทรงจำที่เก่าเกินไป บทความใหม่ และคำแนะนำทักษะในการเรียกครั้งเดียว - หลีกเลี่ยงทางตันในอดีต — ให้เอเจนต์ตรวจสอบสุสานก่อนที่จะแนะนำไลบรารีหรือรูปแบบที่เคยล้มเหลวมาก่อน
- เรียกคืนการตัดสินใจในอดีต — ใช้
recallเพื่อแสดงการตัดสินใจ การแก้ไข และรูปแบบจากเซสชันก่อนหน้าในหลายโปรเจกต์ - บันทึกประสบการณ์ที่ได้มาอย่างยากลำบาก — บันทึกการแก้ไขด้วย
record_experienceเพื่อให้บทเรียนที่ต้องใช้ความพยายามจริงปรากฏขึ้นได้ง่ายขึ้นในครั้งถัดไป - ลบความทรงจำที่ซ้ำกัน — รัน
find_duplicatesเพื่อระบุและล้างความทรงจำที่เก็บไว้เกือบเหมือนกันเป็นกลุ่ม - สำรองความทรงจำของคุณ — ส่งออกทุกอย่างไปยังไฟล์ JSON ที่คุณเป็นเจ้าของด้วย
dump_to_file
เอกสาร
Self-hosted semantic memory สำหรับ AI Agents. เซสชันแบบถาวร การให้คะแนนประสบการณ์ และสุสานสำหรับทางตัน ทั้งหมด backed by ความรู้ที่ได้จาก RSS ที่คุณอ่านและเก็บไว้ใน Valkey vector search จากนั้นเปิดเผยเป็น MCP server. https://omnimem.org
<OmniMem>omnimem.org
การพัฒนาดำเนินการบน Codeberg — กรุณาแจ้งปัญหาและ PR ที่นั่น
หยุดใช้ชีวิตในเซสชันเดิมซ้ำสอง
ทุกเซสชันของ Claude Code เริ่มต้นจากศูนย์ ไม่มีความทรงจำเกี่ยวกับโปรเจกต์ของคุณ ไม่มีความทรงจำว่าอะไรล้มเหลวเมื่อสัปดาห์ที่แล้ว ไม่มีความทรงจำว่าคุณใช้เวลาสามชั่วโมงเมื่อวันอังคารที่ผ่านมาค้นหาว่าทำไม onnxruntime ถึงระเบิดบน Alpine ก่อนจะพบสิ่งที่ใช้งานได้จริง
คุณจึงต้องอธิบายโปรเจกต์อีกครั้ง Claude ก็แนะนำไลบรารีที่พังเหมือนเดิมอีกครั้ง สัญญาณเตือนเดิม เพลงเดิม คุณคือ Bill Murray และ Claude คือ Punxsutawney
OmniMem แก้ปัญหานั้น มันคือ MCP server แบบ self-hosted ที่ให้หน่วยความจำถาวรแก่ AI agent ของคุณข้ามเซสชัน โปรเจกต์ และเครื่องจักร มันรันบนฮาร์ดแวร์ของคุณเองและฟรีตลอดไป
claude> use onnxruntime for the embeddings
⚠ WARNING: previously abandoned approach
onnxruntime — SIGILL crash on Alpine musl libc (effort: 4/5)
→ switched to sentence-transformers instead
คำเตือนนั้นมาจากความทรงจำ ไม่ใช่โชค ความผิดพลาดที่คุณจ่ายไปแล้วไม่ควรถูกเรียกเก็บเงินซ้ำสอง
เริ่มต้นอย่างรวดเร็ว
เคล็ดลับ
คำสั่งเดียวก็ได้ทั้งสแตกทำงานจาก Docker Hub images ที่ build ไว้แล้ว:
curl -fsSL https://codeberg.org/ric_harvey/omnimem/raw/branch/main/install.sh | bashจากนั้นชี้ agent ของคุณไปที่มัน — quick start อธิบายส่วนที่เหลือ หรือข้ามไปที่ ส่วน quick start ที่ละเอียดกว่าด้านล่าง
สิ่งที่มันจำได้
ความทรงจำห้าประเภท ทั้งหมดถูกค้นหาร่วมกันเมื่อต้องการเรียกคืน:
- Episodic — การตัดสินใจที่คุณทำ บั๊กที่คุณแก้ รูปแบบที่คุณค้นพบ สิ่งที่ต้องใช้ความพยายามจริง ๆ ในการเรียนรู้และไม่ควรต้องเรียนรู้ใหม่ทุกเช้า
- Project context — สแตก เป้าหมาย และสถานะปัจจุบันของคุณ Agent มาถึงทุกเซสชันพร้อมข้อมูลสรุปแล้วแทนที่จะเริ่มจากศูนย์
- Knowledge — RSS feeds ที่คุณกำหนดค่า ถูกดึงตามกำหนดเวลา สรุปโดย Claude Haiku ฝัง และจัดเก็บ เมื่อบทความที่เกี่ยวข้องตีพิมพ์เมื่อสัปดาห์ที่แล้ว มันจะปรากฏเป็นจุดเริ่มต้นที่ควรอ่าน
- Preferences — กฎเชิงบรรทัดฐานเกี่ยวกับวิธีที่คุณต้องการทำงาน ("อัปเดต README เสมอหลังจากฟีเจอร์เสร็จ") ถูกดึงออกมาจากบทสนทนาของคุณโดยอัตโนมัติและแสดงเมื่อเกี่ยวข้อง
- Skills — เอกสาร SKILL.md ที่คอมไพล์จากประสบการณ์สะสมของคุณในโดเมนหนึ่ง เพื่อให้ agent ทำงานแบบเดียวกับคุณตั้งแต่พรอมพ์แรก มาจาก namespace อื่น ไม่เคยแก้ด้วยมือ และทุกการเปลี่ยนแปลงต้องผ่านการตรวจสอบของคุณ ดู skill compiler ผลการค้นคืนอันดับต้นอาจเป็นการตัดสินใจจากหกเดือนก่อนในโปรเจกต์อื่น วิธีแก้ปัญหาจากเมื่อวาน หรือบทความที่ลงเมื่อคืนวันอังคาร ไม่สำคัญว่ามันมาจากไหน ขอเพียงแค่มันมีประโยชน์
อะไรที่ทำให้แตกต่าง
ไม่ใช่แค่คีย์-วอลล์สโตร์ที่ห่อด้วย MCP wrapper เท่านั้น OmniMem จำลองวิธีการทำงานของความจำจริง ๆ: สิ่งต่าง ๆ จางหายไปตามกาลเวลา บางครั้งก็ขัดแย้งกันเอง และสิ่งที่ได้มาอย่างยากลำบากก็สมควรได้ที่ยืนของมัน
- สุสาน — ทุกทางตันจะถูกบันทึกพร้อมกับสิ่งที่ลองแล้ว ทำไมมันถึงล้มเหลว และเสียเวลาไปเท่าไร เอเจนต์จะตรวจสอบสิ่งนี้ก่อนที่จะแนะนำไลบรารีหรือแพตเทิร์น
- การให้คะแนนตามประสบการณ์ — สิ่งที่ต้องลองสี่ครั้งและใช้วิธีเลี่ยงบนแพลตฟอร์มที่แปลกประหลาดเพื่อแก้ได้คือทองคำ ยิ่งยากเท่าไร ก็ยิ่งถูกดึงขึ้นมาได้ง่ายขึ้นในครั้งหน้า
- วงจรชีวิตของความจำ —
ACTIVE → DEPRIORITISED → ARCHIVED → DELETED"ลืมเรื่อง X" โดยปกติหมายถึงหยุดพูดถึงมัน ไม่ใช่ลบมันออกจากการมีอยู่ ความจำที่ถูกลดความสำคัญสามารถกลับมามีค่าอีกครั้งได้ - การตรวจจับความขัดแย้ง — หากความจำใหม่ไม่เห็นด้วยกับสิ่งที่เก็บไว้ OmniMem จะจับได้ ฮิวริสติกแบบเร็วในการเขียนทุกครั้ง และการวิเคราะห์เชิงลึกเพิ่มเติมผ่าน Claude Haiku
- การตัดซ้ำเชิงความหมาย — ความจำที่เกือบเหมือนกันจะถูกทำเครื่องหมายตอนเขียน และทำความสะอาดเป็นกลุ่มด้วย
find_duplicates() - การสรุปด้วยการเรียกครั้งเดียว —
briefing()เดียวจะคืนบริบทโปรเจกต์ สถิติประสบการณ์ ความจำที่เก่า บทความใหม่ คำเตือนความขัดแย้ง และคำแนะนำทักษะ ไม่ต้องวอร์มอัพสามขั้นตอน - ตัวคอมไพล์ทักษะ — กลั่นบทเรียนที่ถูกเสริมแรงและทางตันให้เป็นทักษะที่โหลดได้ ภายใต้เกตเสนอแล้วยอมรับ เพื่อให้บทเรียนที่ไม่ดีไม่กลายเป็นนโยบายอย่างเงียบ ๆ
- การบำรุงรักษาอัตโนมัติ — เก็บถาวรรายการซ้ำ ทำเครื่องหมายความขัดแย้ง ทำความสะอาดความรู้ที่หมดอายุ ทั้งหมดในเบื้องหลัง
- เว็บ UI — เรียกดู ค้นหา และจัดการทุกอย่างจากแดชบอร์ด htmx พร้อมเทเลเมทรีและ Prometheus
/metricsเอนด์พอยต์
สูตรการจัดอันดับเบื้องหลังการค้นคืนทุกครั้ง:
score = similarity x surface_score x recency x experience_weight
สี่ปัจจัยตัดสินว่าอะไรจะกลับมา ความคล้ายคลึงเชิงความหมายอย่างเดียวไม่พอ — สถานะวงจรชีวิต อายุ และความยากในการเรียนรู้บทเรียน ล้วนมีบทบาท
ทำงานกับเอเจนต์ MCP ใดก็ได้
เลเยอร์ความจำเดียวสำหรับทั้งหมด: claude.ai, Claude Code, Claude Desktop, Cursor, GitHub Copilot, GitLab Duo, AWS Kiro, OpenCode, OpenAI Codex CLI, และ Open Design
สถาปัตยกรรม
สี่คอนเทนเนอร์ ไม่มีอะไรออกจากเครื่องของคุณ เอ็มเบดดิ้งในเครื่องผ่าน sentence-transformers จัดเก็บใน Valkey พร้อมการค้นหาเวกเตอร์ และประตูหน้าทั้งสองใช้เอนจินความจำเดียวกัน
flowchart TB
agent["AI agent<br/>Claude Code · claude.ai · Cursor · Copilot · ..."]
browser["Browser"]
agent -- "MCP · Streamable HTTP / SSE · :8765" --> mcp
browser -- "HTTP · :8080" --> webui
subgraph stack["Docker Compose stack"]
mcp["MCP server<br/>Python · FastMCP<br/><i>remember · recall · briefing<br/>compile_skill · record_experience</i>"]
webui["Web UI<br/>Starlette · htmx · Jinja2<br/><i>dashboard · search · skills<br/>projects · backups · /metrics</i>"]
rss["RSS worker<br/>feedparser · APScheduler<br/>Claude Haiku summaries"]
valkey[("Valkey + valkey-search<br/>HNSW vector indexes<br/><i>idx:episodic · idx:project · idx:knowledge<br/>idx:preference · idx:skill</i>")]
mcp <--> valkey
webui <--> valkey
rss --> valkey
end
ภาพรวมทั้งหมด — ไพพ์ไลน์การค้นคืน โมเดลการจัดเก็บ และการตัดสินใจออกแบบ — อยู่ใน docs/architecture.md
โฮสต์เอง โอเพนซอร์ส เป็นของคุณ
ไม่มี SaaS ไม่มีการล็อกอินกับผู้ขาย ไม่ส่งบริบทไปยังเซิร์ฟเวอร์ของคนอื่น
- Valkey คือฟอร์กโอเพนซอร์สของ Redis ข้อมูลทั้งหมดของคุณอยู่ในวอลุ่ม Docker ที่มีชื่อบนเครื่องของคุณเอง
- อิมเมจ Docker หลายสถาปัตยกรรม สำหรับ amd64 และ arm64 มันรันบน Raspberry Pi, AWS Graviton หรือ Apple Silicon ได้ดีเท่ากับ x86
- sentence-transformers รันเอ็มเบดดิ้งในเครื่องโดยไม่มีการเรียก API
- สัญญาอนุญาต MIT หมายถึงฟอร์ก ขยาย และรันได้ทุกที่ที่ต้องการ
- คำสั่งสำรองหนึ่งคำสั่ง เรียก
dump_to_file()และส่งออกทุกอย่างเป็นไฟล์ JSON ที่คุณเป็นเจ้าของ
เปิดพอร์ต MCP ผ่านรีเวิร์สพร็อกซีของคุณ แล้วทุกเครื่องที่คุณทำงานจะแชร์ความจำเดียวกัน หนึ่งการติดตั้ง ใช้ได้ทุกที่ — ดู docs/remote-access.md
เริ่มต้นอย่างรวดเร็ว
ตัวติดตั้งจะตรวจสอบว่า Docker ติดตั้งแล้ว สร้างรหัสผ่านที่ปลอดภัย เขียน .env ที่เหมาะสม และเริ่มทุกอย่างจากอิมเมจ Docker Hub ที่สร้างไว้ล่วงหน้า:
curl -fsSL https://codeberg.org/ric_harvey/omnimem/raw/branch/main/install.sh | bash
หรือสร้างจากซอร์ส:
git clone https://codeberg.org/ric_harvey/omnimem.git && cd omnimem
cp .env.example .env
# Set VALKEY_PASSWORD and ANTHROPIC_API_KEY in .env
docker compose up -d
จากนั้นชี้เอเจนต์ของคุณไปที่มัน — Claude Code (~/.claude.json):
{
"mcpServers": {
"omnimem": {
"type": "sse",
"url": "http://localhost:8765/sse"
}
}
}
เซิร์ฟเวอร์จะส่งคู่มือการใช้งานไปยังเอเจนต์ที่เชื่อมต่อโดยอัตโนมัติผ่านฟิลด์ MCP instructions — ไม่ต้องใช้ไฟล์คอนฟิกูเรชัน แดชบอร์ดเว็บอยู่ที่ http://localhost:8080
คำแนะนำแบบเต็ม รวมถึงโทเค็นการรับรองความถูกต้อง การตั้งค่าสิทธิ์ และเอเจนต์อื่น ๆ อยู่ใน docs/quick-start.md
เอกสารประกอบ
| เริ่มต้นอย่างรวดเร็ว | ตัวติดตั้ง สร้างจากซอร์ส เชื่อมต่อเอเจนต์ของคุณ |
| ฟีเจอร์เชิงลึก | วงจรชีวิต สุสาน การให้คะแนนประสบการณ์ การตัดซ้ำ ความขัดแย้ง การสรุป |
| ตัวคอมไพล์ทักษะ | คอมไพล์ประสบการณ์เป็นทักษะที่โหลดได้ |
| เอกสารอ้างอิงเครื่องมือ MCP | เครื่องมือทั้งหมด 30+ รายการ |
| เอกสารอ้างอิงคอนฟิกูเรชัน | ตัวแปรสภาพแวดล้อมทุกตัว |
| RSS และความรู้ | การรับความรู้แบบพาสซีฟและการเลื่อนระดับ |
| หลายเครื่อง | รีเวิร์สพร็อกซี OAuth 2.1 สำหรับ claude.ai การแก้ไขปัญหา |
| เว็บ UI | แดชบอร์ดการจัดการและเมตริก Prometheus |
| สถาปัตยกรรม | คอนเทนเนอร์ ไพพ์ไลน์การค้นคืน การตัดสินใจออกแบบ |
| สเปกประเภทความจำ | โมเดลการจัดเก็บ ทีละฟิลด์ |
| คู่มือการเชื่อมต่อ | การตั้งค่าต่อเอเจนต์ |
| คู่มือการติดตั้ง | macOS · Raspberry Pi · AWS · GCP · Linux + Tailscale Funnel |
สเปกการจัดเก็บต่อเนมสเปซ หากคุณต้องการรู้แน่ชัดว่าอะไรถูกเขียนลง Valkey และโดยใคร: ภาพรวม · episodic · project · knowledge · preference · skill
การมีส่วนร่วม
ยินดีรับ Issues และ PR การพัฒนาอยู่บน Codeberg — กรุณาส่ง issues และ PR ที่นั่น OmniMem ออกแบบมาให้ขยายได้ และไพพ์ไลน์การให้คะแนนถูกจัดโครงสร้างเพื่อให้เพิ่มตัวคูณใหม่ได้โดยไม่แตะแกนหลัก เครื่องมือ MCP ใหม่ ประเภทเนมสเปซเพิ่มเติม และแบ็กเอนด์เอ็มเบดดิ้งทางเลือก ล้วนเป็นทิศทางที่สมเหตุสมผล
สัญญาอนุญาต
MIT ใช้ ฟอร์ก และแก้ไขได้ฟรี ไม่มีระดับองค์กร ไม่มีเวอร์ชันโฮสต์ ไม่มีเงื่อนไขผูกมัด
สร้างโดย Ric Harvey @ SquareCows Ltd บริษัทที่ปรึกษาด้าน AI และระบบอัตโนมัติสำหรับคนที่อยากเป็นเจ้าของเครื่องมือของตัวเอง