Tôi đã tạo ra 'memorize' để các AI agent chia sẻ ký ức dự án — và tôi cần sự giúp đỡ
(github.com/shakystar)Vấn đề này bắt đầu từ trải nghiệm tôi gặp phải mỗi ngày khi phát triển một mình. Các nhà cung cấp liên tục tung ra mô hình tốt hơn mỗi ngày, và mỗi lần tôi chuyển sang mô hình khác để tiếp tục phát triển bằng mô hình đó (kiểu như từ Opus 4.7 sang GPT 5.5), bộ nhớ làm việc của dự án lại không đi theo. Trong khi mỗi agent tích lũy một silo bộ nhớ riêng cho mình, tôi phải tự tay khôi phục lại ngữ cảnh bị đứt gãy hết lần này đến lần khác. Các tính năng bộ nhớ ban đầu của agent quá nghèo nàn nên khi phiên làm việc kết thúc thì ngữ cảnh cũng chết theo, lại còn bị khóa trong một máy duy nhất, nên công việc đang làm trên desktop không thể tiếp tục trên laptop.
Dự án cần có ký ức của riêng dự án. Vì vậy tôi đã tạo ra nó: một dự án mã nguồn mở local-first để chính dự án tự có bộ nhớ.
Những điểm tôi tự tin về mặt kỹ thuật
-
Bộ nhớ 2 tầng vay mượn từ hệ học tập kép của não bộ (CLS) — trong lúc làm việc thì chỉ ghi nhận quan sát với chi phí rẻ mà không cần LLM (hippocampus), còn việc hợp nhất được xử lý nền ở ranh giới phiên làm việc (neocortex). Sự quên lãng không xảy ra bằng xóa bỏ mà chỉ bằng cạnh tranh điểm số tại thời điểm truy hồi (mức độ quan trọng × độ mới với chu kỳ bán rã 14 ngày × mức liên quan tới tác vụ), và không có ký ức nào bị xóa.
-
Không cần API key — không cần LLM riêng cho việc tích hợp. Chỉ cần khởi chạy nguyên trạng
claude -p/codex execđã đăng nhập sẵn. Agent dùng chính bản thân nó để sắp xếp lại ký ức của mình, và vòng đệ quy vô hạn phát sinh khi đó (hợp nhất → hook kích hoạt → hợp nhất → …) được chặn bằng cơ chế guard qua biến môi trường. -
Hợp nhất không mất dữ liệu — watermark chỉ tiến lên sau khi sự kiện được lưu bền vững, nên nếu LLM timeout hoặc parsing thất bại thì ranh giới tiếp theo sẽ thử lại cùng đoạn đó. Ngay cả khi chính watermark bị mất, dedup dựa trên nguồn cũng ngăn hợp nhất trùng lặp.
-
Hội tụ đa máy không cần server — chỉ cần đồng bộ event log append-only, mọi máy sẽ hội tụ về cùng một trạng thái chỉ bằng các quy tắc tất định dựa trên nội dung, không cần đồng bộ đồng hồ. Ngay cả khi hai máy cùng lúc hợp nhất cùng một đoạn, mọi bản sao vẫn chọn ra cùng một bên thắng.
-
Không tin embedding khi phát hiện mâu thuẫn — độ tương đồng cosine bị mù trước câu phủ định ("hãy merge" và "đừng merge" có vector gần như giống nhau). Vì vậy độ tương đồng chỉ được dùng đến bước thu hồi ứng viên, còn phán định thì do LLM thực hiện. Ký ức thua cuộc không bị xóa mà chỉ bị đóng thời hạn hiệu lực, nên vẫn có thể phục hồi rằng "khi đó điều này là đúng".
-
Chia sẻ thời gian thực giữa các phiên song song — các phiên đang chạy trong cùng một dự án có thể nhìn thấy công việc của nhau, và nếu cùng chạm vào một file thì sẽ hiện cảnh báo xung đột.
-
Tiến hóa schema bằng đo đạc chứ không phải lý thuyết — việc có nên thay đổi hệ thống phân loại ký ức hay không sẽ được quyết định bằng dữ liệu, sau khi thu thập trong vài tuần các trường tuổi thọ chỉ dành cho quan sát gắn vào từng ký ức và telemetry hành vi (được inject khi nào, bị vô hiệu hóa khi nào). Toàn bộ cuộc tranh luận này đang được công khai trong Discussions của repository.
Vì sao công bố ngay lúc này
Thành thật mà nói tôi muốn phát hành khi nó chín hơn. Nhưng khi thấy OpenAI tung ra các tính năng bộ nhớ kiểu dreaming, tôi đã đổi suy nghĩ — việc những nhà cung cấp lớn bắt đầu đào sâu cùng một vấn đề có nghĩa là hướng đi này là đúng, và tôi nghĩ cần phải có một lựa chọn trung lập với nhà cung cấp trước khi ký ức bị khóa trong vendor trở thành tiêu chuẩn. Vì vậy tôi công bố nó ngay bây giờ.
Tôi muốn đi tới đâu
Với sự xuất hiện của các mô hình cấp Fable 5, agent giờ đã đạt đến mức có thể cộng tác với nhau, nhưng lại không có hạ tầng chia sẻ để hỗ trợ việc đó. Về dài hạn, tôi muốn tạo ra một nền tảng mang tính công ích làm cho ký ức và cộng tác của agent những gì Git đã làm cho mã nguồn. Vì không có tiền nên tôi không thể bắt đầu từ server — và chính ràng buộc đó lại dẫn tới một thiết kế local-first có thể hội tụ mà không cần server. Hiện tại, mảnh ghép đầu tiên là "chia sẻ ký ức dự án ở local" đã hoạt động hoàn chỉnh. Trên thực tế, phần lớn các cuộc thảo luận thiết kế, triển khai và cả đợt phát hành rạng sáng nay của dự án này đều được thực hiện cùng với agent — đúng theo kiểu cộng tác mà công cụ này muốn tạo ra.
Những hỗ trợ cụ thể tôi đang cần
- Dùng thử và báo cáo những chỗ bị vỡ — chỉ cần cài bằng một dòng rồi mở issue. Chỉ riêng trong khâu kiểm chứng trước khi phát hành hôm nay, tôi đã bắt được 2 bug trong script cài đặt (dấu nháy của PowerShell 5.1, Linux EACCES), và chắc chắn vẫn còn nữa.
- Adapter cho các agent khác — những ai hiểu cấu trúc hook của Cursor, Gemini CLI, Windsurf.
- Tham gia tranh luận về hệ thống phân loại ký ức — đã có Discussions mở về câu hỏi "các loại ký ức là gì" để quyết định bằng dữ liệu.
Cài đặt chỉ bằng một dòng (Windows xem lệnh PowerShell trong README):
curl -fsSL https://raw.githubusercontent.com/shakystar/memorize/… | sh
Hoặc một dòng trong phiên Claude/Codex: "Set up memorize in this project. Follow
https://github.com/shakystar/memorize/…;
Repository: https://github.com/shakystar/memorize · README tiếng Hàn
(https://github.com/shakystar/memorize/blob/main/docs/i18n/README.ko.md) · Tài liệu thiết kế
(https://github.com/shakystar/memorize/blob/main/docs/ARCHITECTURE.md)
AGPL, toàn bộ lưu trữ ở local, không telemetry. Mọi phản hồi đều được chào đón.
1 bình luận
Tôi là người tạo ra nó.
Một ngày ngay trước khi phát hành dự án này đã diễn ra đúng theo kiểu cộng tác mà công cụ này hướng tới. Tôi đã thảo luận thiết kế với các agent về việc "có nên gắn tag cho phân loại ký ức không, trong não đâu có tag", rồi sự đồng thuận được ghi lại cố định trong GitHub Discussions và issue, PR triển khai được merge, thậm chí còn xác nhận việc dogfooding khi agent dùng chính nó (
claude -p) làm trình trích xuất để hợp nhất nhật ký công việc thực tế vào bộ nhớ dài hạn, rồi mới nhấn nút phát hành. Các tranh luận thiết kế trong quá trình đó đều được công khai trong Discussions của repository.Một câu hỏi tôi nghĩ sẽ thường nhận được nhưng chưa viết trong bài là "có bị chậm hoặc tốn chi phí không", nên xin trả lời trước: trong lúc làm việc thì LLM hoàn toàn không tham gia. Khâu capture là bộ lọc theo quy tắc nên độ trễ cảm nhận được là 0, và LLM chỉ chạy đúng một lần để hợp nhất ở ranh giới phiên, mà việc đó cũng là một tiến trình nền tách biệt nên không chặn agent dù chỉ 1 giây. Ngay cả lời gọi đó cũng đi qua gói đăng ký claude/codex mà bạn vốn đang dùng nên không phát sinh phí API riêng. Theo dogfooding hôm nay, 44 quan sát trong một phiên đã được hợp nhất bằng 1 lần gọi nền (khoảng 30 giây), và phần chèn lúc bắt đầu phiên cũng chỉ là văn bản trong ngân sách 4.000 ký tự nên hầu như không có gánh nặng token. Mục tiêu là cài xong rồi quên nó đi.
Chia sẻ một lỗi bắt được trong quá trình kiểm thử trên máy thật trước khi phát hành: lệnh kiểm tra trong README được ghi là
npx memorize, nhưng góimemorizekhông có scope trên npm lại là package của người khác. Tôi tin vẫn sẽ còn những điểm kiểu như thế này, chỉ hiện ra trên máy thật, nên các báo cáo như vậy thực sự rất có giá trị.Nhờ mọi người: tôi đã trực tiếp kiểm thử trên máy thật với Windows và WSL/Linux, nhưng không có máy macOS thật. Trên CI thì toàn bộ test suite macOS đều pass, nhưng tôi chưa thể chạy thử trọn vòng đời trên máy thật từ cài đặt một dòng → hook → chèn khi bắt đầu phiên. Nếu ai đang dùng macOS có thể thử cài và cho biết hoạt động hay bị lỗi qua bình luận hoặc issue thì sẽ giúp ích rất nhiều.
Các câu hỏi về thiết kế (vì sao không dùng embedding để ra quyết định, vì sao không có xóa, hội tụ đa máy không cần đồng hồ diễn ra như thế nào) cũng rất được hoan nghênh — tôi sẽ trả lời tất cả.