Phạm Văn Thư
RAG và quản trị tri thức · Nội dung có hỗ trợ AI

Memos: dòng thời gian ghi chú tự lưu trữ cho cá nhân và nhóm nhỏ

Đăng ngày 12/10/2026

Mục lục bài nghiên cứu
Hình đại diện Memos — RAG mã nguồn mở

Memos dành cho ghi chú ngắn, không phải để thay wiki

Memos là ứng dụng ghi chú tự lưu trữ (self-hosted, chạy trên máy chủ do người dùng kiểm soát) tổ chức ghi chú thành một dòng thời gian. Người dùng viết bằng Markdown, đăng trong vài giây và chọn ai được xem từng memo: chỉ mình, người được mời, hoặc bất kỳ ai có liên kết. Mã nguồn phát hành theo giấy phép MIT. [1][2]

Đáng thử khi cá nhân hoặc nhóm nhỏ cần nơi ghi nhanh ý tưởng, nhật ký công việc, mẹo kỹ thuật, tìm lại theo từ khóa, nhãn hay ngày, và muốn dữ liệu nằm trên hạ tầng của mình. Tại commit khảo sát, dự án còn có Space cho cộng tác nhóm và cổng MCP để AI agent đọc, ghi memo qua chính API của ứng dụng. [1][6][8]

Không nên dùng Memos làm hệ thống tài liệu chính thức cần trang lồng nhau, biên tập cộng tác hay cách ly dữ liệu giữa các khách hàng trên cùng một máy chủ: thiết kế Space nói rõ Space không phải ranh giới tenant và không hỗ trợ đồng biên tập. Theo phân tích của bài, vai trò hợp lý nhất của Memos là hộp thu tri thức vụn, đi kèm quy ước phân quyền rõ ràng. [8]

Tri thức vụn trong nhóm kỹ thuật: thứ dễ thất lạc nhất

Phần lớn tri thức vận hành của một nhóm phần mềm nằm trong những mẩu ngắn: lệnh khắc phục sự cố vừa tìm ra, lý do chọn một thư viện, ghi chú sau buổi họp với khách, cấu hình đặc thù của một môi trường. Chúng trôi trong kênh chat hoặc nằm trên máy cá nhân, rồi biến mất khi người viết chuyển dự án.

Wiki có cấu trúc buộc người viết chọn vị trí, đặt tiêu đề, định dạng trang; chừng đó đủ khiến nhiều người bỏ qua. README của Memos đặt triết lý ngược lại: lưu một suy nghĩ mà không cần chọn tiêu đề hay thư mục, tìm lại bằng tìm kiếm, nhãn hoặc ngày, ghim thứ quan trọng và lưu bộ lọc hay dùng thành view. [1]

Vấn đề thứ hai là quyền sở hữu dữ liệu. Dịch vụ ghi chú đám mây tiện lợi nhưng đặt dữ liệu ở nhà cung cấp, điều có thể vướng hợp đồng khi ghi chú chứa thông tin dự án của khách hàng. README nhấn mạnh việc tự lưu trữ, tuyên bố không có telemetry (thu thập dữ liệu sử dụng) và cho phép xuất toàn bộ memo. [1]

Go, React và ba hệ quản trị dữ liệu: Memos được tổ chức ra sao

Theo AGENTS.md, tệp hướng dẫn dành cho tác nhân lập trình trong kho, backend viết bằng Go với Echo, Connect RPC, gRPC-Gateway và Protocol Buffers; frontend là SPA (ứng dụng web một trang) dùng React, TypeScript, Vite, Tailwind CSS và React Query; dữ liệu lưu trong SQLite, MySQL hoặc PostgreSQL. Bản dựng SPA được nhúng vào binary Go bằng go:embed, nên một tiến trình phục vụ cả giao diện lẫn API. [5]

Mã được phân tầng theo hướng phụ thuộc một chiều, từ cmd qua server, core, store rồi tới provider, markdown, filter và cuối cùng là internal, được kiểm tra bằng depguard. Tầng server lo giao vận: API, phục vụ tệp, MCP, xác thực bằng JWT access token, refresh token và personal access token; core giữ quy tắc nghiệp vụ không dính HTTP hay SQL; store định nghĩa interface Driver với ba bản hiện thực cho ba cơ sở dữ liệu. [5]

Gói filter biên dịch biểu thức CEL (ngôn ngữ biểu thức của Google dùng để lọc) thành SQL riêng cho từng driver, làm nền cho view và bộ lọc lưu sẵn; provider chứa các backend cấu hình theo instance gồm AI, nhà cung cấp định danh và lưu trữ. Ở trình duyệt, người dùng hiện tại được tải một lần lúc khởi động vào AuthContext rồi nạp sẵn vào bộ nhớ đệm React Query. [3][5]

Một memo đi đâu sau khi bấm lưu

Khi người dùng lưu memo, SPA gọi API qua client Connect; tầng server/api nhận yêu cầu, chuyển quy tắc sang core, rồi store ghi vào cơ sở dữ liệu đã chọn. Gói markdown phân tích nội dung để tạo payload như nhãn; tệp đính kèm đi qua fileserver có thumbnail và range request, còn nơi lưu tệp do provider storage quyết định. [5]

Quyền đọc gắn với audience của từng memo, trong API gọi là visibility: PRIVATE chỉ tác giả đọc; PROTECTED cho người đã đăng nhập; PUBLIC thêm người ẩn danh nếu chính sách instance cho phép; SPACE cho thành viên đang hoạt động của Space được gán. Bộ lọc CEL chỉ có thể thu hẹp tập kết quả, và điều kiện quyền được áp trước khi phân trang. [8]

Sau mỗi thay đổi, server phát sự kiện làm mới qua SSE (kênh đẩy một chiều từ máy chủ) như memo.changed hay space.changed, không kèm tên tài nguyên hay người thực hiện; client tự tải lại qua kiểm tra quyền thông thường. Dữ liệu rời instance qua liên kết chia sẻ một memo, công cụ MCP dùng token của người gọi, email, webhook và gói xuất ZIP của chính người dùng. [6][8][9]

Khả năng hiện có, đối chiếu từng nguồn

Ghi chép và tìm lại: memo Markdown kèm ảnh và tệp; tìm kiếm, lọc theo nhãn, duyệt theo ngày trên timeline, ghim, lưu bộ lọc thành view; memo mới mặc định riêng tư. README giới thiệu thêm Memos Web Clipper cho Chrome và Firefox để lưu trang, đoạn chọn và ảnh thành Markdown có liên kết nguồn. [1]

Cộng tác: Space gom thành viên và memo vào một ngữ cảnh chung, với vai trò ADMIN hoặc USER; lời mời phải được người nhận chấp nhận; mỗi memo chưa gán hoặc gán đúng một Space; bình luận là memo độc lập nối với memo ngữ cảnh. Tài liệu thiết kế ghi trạng thái Implemented và cho biết thay đổi được phát hành cùng migration ở v0.31.0. [8]

Di chuyển dữ liệu: Memos Export Format là tệp ZIP gồm manifest.json, mỗi memo một tệp JSON và một tệp Markdown giữ nguyên byte, cùng tệp đính kèm có mã SHA-256; nhập lại một gói nhiều lần cho cùng kết quả, xung đột xử lý theo SKIP, REPLACE hoặc DUPLICATE. AGENTS.md lưu ý tài liệu thiết kế được đóng băng sau khi hiện thực, nên hành vi hiện tại phải kiểm chứng trong mã và kiểm thử. [5][9]

Cổng MCP: để AI agent làm việc với memo qua chính API công khai

Gói server/mcp phục vụ endpoint Model Context Protocol (chuẩn mở để trợ lý AI khám phá và gọi công cụ bên ngoài) tại /mcp qua Streamable HTTP ở chế độ không trạng thái. Mỗi lời gọi công cụ được dịch thành yêu cầu tới REST API tương ứng và chạy ngay trong tiến trình, nên MCP không có logic lưu trữ riêng và dùng lại nguyên cơ chế xác thực, phân quyền của API. [6]

Bộ công cụ là một danh sách cho phép: thao tác memo, bình luận, tệp đính kèm, phản ứng, quan hệ, các thao tác của dịch vụ Space gồm thành viên và lời mời, cùng hai công cụ định hướng là liệt kê view đã lưu và whoami; bảng trong README của gói có 36 công cụ. Máy chủ chỉ quảng bá khả năng tools, không có prompts hay resources. [6]

Agent gửi header Authorization dạng Bearer kèm personal access token; thao tác ghi cần token hợp lệ. Máy chủ kiểm tra Origin để chống DNS rebinding, giới hạn thân yêu cầu 256 MiB, và gắn chú thích ReadOnly, Destructive, Idempotent làm gợi ý cho client, không thay phân quyền. Token cấp cho agent mang toàn bộ quyền của người dùng đó, còn công cụ xóa Space xóa luôn mọi memo đặt trong Space, nên agent cần tài khoản riêng với quyền tối thiểu. [6]

Hợp với ai: cá nhân, nhóm nhỏ và cộng đồng nội bộ

Phù hợp tự nhiên nhất là người dùng cá nhân cần một nhật ký tri thức riêng: một container, một thư mục dữ liệu, ghi bằng Markdown. Với ai đang dựng hệ thống bộ não thứ hai, hướng mà loạt nghiên cứu trên phamvanthu.com quan tâm, Memos có thể làm hộp thu ý tưởng thô trước khi sắp xếp sang kho tài liệu có cấu trúc. [1]

Nhóm từ vài người tới vài chục người như nhóm kỹ thuật, nhóm nghiên cứu hay ban biên tập có thể dùng Space để chia ngữ cảnh làm việc và chọn audience cho từng memo. Tổ chức cần đăng nhập một lần (SSO) nên kiểm tra kỹ provider định danh trước khi cam kết. [5][8]

Không hợp với nơi cần cách ly dữ liệu giữa khách hàng trên một instance, vì Space không phải tenant và quản trị viên ứng dụng đọc được mọi memo theo tên; cũng không hợp làm kho hồ sơ chính thức cần phê duyệt hay lịch sử kiểm toán. [8]

Phác thảo cho công ty gia công phần mềm: sổ tay dự án theo Space

Tình huống giả định: một công ty gia công phần mềm khoảng 80 kỹ sư làm cho khách hàng Nhật Bản và châu Âu theo mô hình đội dự án riêng. Mỗi đội có ghi chú daily, quyết định kỹ thuật nhỏ, kinh nghiệm xử lý sự cố, ghi chú sau buổi họp với khách, phần lớn đang trôi trong chat. Ban kỹ thuật muốn một nơi ghi nhanh, tìm được, nằm trên hạ tầng công ty. Đây là phác thảo đề xuất, chưa phải dự án đã triển khai.

Thiết kế xuất phát từ ràng buộc hợp đồng. Vì Space không phải ranh giới tenant và quản trị viên ứng dụng đọc được mọi memo theo tên, dự án có NDA nghiêm ngặt nên có instance riêng, do người được khách chấp thuận quản trị. Tri thức nội bộ dùng một instance chung, mỗi đội một Space; ghi chú kỹ thuật đặt audience SPACE, ghi chú cá nhân để PRIVATE, chỉ bài chia sẻ toàn công ty mới để PROTECTED. [8]

Nhãn phân cấp kiểu du-an-a/su-co hay du-an-a/quyet-dinh cùng view lưu sẵn giúp truy lại nhanh; trưởng nhóm rà cuối sprint và chuyển ghi chú có giá trị lâu dài sang tài liệu bàn giao chính thức. Nếu cho trợ lý lập trình đọc memo qua MCP, mỗi đội dùng tài khoản dịch vụ là thành viên USER của đúng Space, có token riêng, sau khi kiểm tra điều khoản khách hàng về việc gửi nội dung tới nhà cung cấp mô hình. Xuất memo hiện chỉ theo từng người dùng, chưa có xuất theo Space. [1][6][9]

Vận hành: một container, một volume và lộ trình nâng cấp bắt buộc

README đưa lệnh docker run với cổng 5230 và volume gắn vào /var/opt/memos; tag stable theo bản ổn định, canary theo bản phát triển. Image dựng trên Alpine, chạy bằng người dùng không phải root, có bản amd64, arm64 và arm/v7, nên chạy được trên máy chủ nhỏ hoặc thiết bị ARM trong văn phòng. [1][5]

Phiên bản đã chuyển sang dạng lịch YY.MM như 26.09.1, không còn tiền tố v. Lược đồ cơ sở dữ liệu tối thiểu là 0.31.8, phát hành trong v0.31.0: cơ sở dữ liệu cũ hơn phải chạy thành công v0.31.0 trước, bản cũ hơn v0.22 hoặc không ghi phiên bản phải qua v0.25.3 rồi v0.31.0, và binary từ chối lược đồ mới hơn mức nó hỗ trợ. [1][7]

Gói xuất không phải bản sao lưu instance: người dùng, thiết lập, token, webhook, nhà cung cấp định danh và bản thân Space không nằm trong đó. Vì vậy cần sao lưu cơ sở dữ liệu cùng kho tệp đính kèm và diễn tập khôi phục; bản sửa bảo mật chỉ dành cho bản mới nhất, nên lịch cập nhật phải đều đặn. [4][9]

Quyền đọc theo audience, đặc quyền quản trị và giới hạn của Space

Mô hình quyền tách bạch vị trí đặt, audience, quyền tác giả và phân phối. Thành viên Space không tự động đọc được memo PRIVATE của người khác trong Space; người ngoài vẫn đọc trực tiếp được memo PROTECTED hoặc PUBLIC dù memo đó được gán vào Space. Nói cách khác, chỉ audience SPACE mới giới hạn người đọc theo tư cách thành viên. [8]

Quản trị viên ứng dụng là siêu người dùng cho các thao tác theo tên memo, đọc được mọi memo hợp lệ, kể cả memo SPACE của Space họ không tham gia; danh sách và feed vẫn giữ bộ lọc thông thường. Xóa cứng một Space xóa luôn mọi memo gán trực tiếp, không có lưu trữ hay khôi phục; email và webhook đã vào hàng đợi không bị hủy khi quyền thay đổi. [8]

SECURITY.md cho biết ở giai đoạn 0.x, dự án chỉ sửa lỗi cho bản mới nhất, không backport, không có chương trình công bố chính thức và không xin mã CVE; báo cáo gửi riêng qua email. Khi đặt ra Internet, nên dùng reverse proxy, TLS, bắt buộc xác thực với triển khai không công khai và chỉ cấp quyền cho người tin cậy. [4]

Giấy phép MIT và những thứ nằm ngoài kho mã

Memos dùng giấy phép MIT; dòng bản quyền trong tệp LICENSE ghi năm 2025 và chủ thể là Memos. MIT không đặt điều kiện copyleft: có thể chỉnh sửa, phân phối hay thương mại hóa, chỉ cần các bản sao mang theo dòng bản quyền và văn bản giấy phép, và tác giả không chịu trách nhiệm bảo hành. Vì vậy doanh nghiệp có thể tự lưu trữ, sửa giao diện hay tích hợp nội bộ mà không phát sinh nghĩa vụ công bố mã. [2]

Giấy phép chỉ bao trùm mã trong kho tại commit này. Trang tài liệu trên website dự án, Web Clipper phát hành qua cửa hàng tiện ích trình duyệt, thư viện phụ thuộc Go và JavaScript, mô hình AI mà provider kết nối tới hay dịch vụ lưu trữ tệp bên ngoài đều cần xem điều khoản riêng; các tệp đã đọc không cho thấy mã Web Clipper nằm trong kho này. [1][5]

Các tệp đã khảo sát không cho thấy một bản doanh nghiệp tách riêng; nguồn hỗ trợ được README nêu là nhà tài trợ và chương trình tài trợ trên GitHub. Một điểm cần ghi khi lập hồ sơ: README mô tả cách đánh số theo lịch YY.MM, trong khi SECURITY.md vẫn gọi dự án là 0.x, nên hãy ghi chính xác tag và commit đã triển khai. [1][4]

Chi phí sở hữu: nhẹ về hạ tầng, nặng về quy ước sử dụng

Memos là một binary Go có giao diện nhúng sẵn và chạy được với SQLite, nên theo giả định của bài một máy ảo nhỏ có thể đủ cho nhóm vài chục người; khi người dùng và tệp đính kèm tăng thì chuyển sang PostgreSQL hoặc MySQL. Bài không có số liệu hiệu năng, nên cấu hình máy phải được xác định qua thí điểm. [5]

Nguồn lực chính là con người: một kỹ sư vận hành dành vài giờ mỗi tháng cho cập nhật, sao lưu, diễn tập khôi phục; một người điều phối đặt quy ước nhãn, Space, audience và nhắc nhóm ghi chép trong vài tuần đầu. Dùng MCP với mô hình qua API thì chi phí biến đổi theo lượng lời gọi của agent; dùng mô hình nội bộ thì chi phí chuyển sang phần cứng suy luận. [6]

Cần tính cả chi phí rủi ro: thời gian xử lý khi phải nâng cấp qua bản trung gian bắt buộc, và công sức chuyển dữ liệu nếu sau này đổi công cụ, vì định dạng xuất được thiết kế để Memos đọc lại, không nhằm tương thích với sản phẩm ghi chú khác. [7][9]

So với wiki, ứng dụng ghi chú SaaS và kênh chat

So với kênh chat, Memos cho tìm lại theo nhãn, ngày và view, tách ghi chú có giá trị khỏi dòng trao đổi; đổi lại mọi người phải đổi thói quen. So với wiki như BookStack, Outline hay Confluence, Memos nhẹ hơn và không có cây trang; wiki hợp với tài liệu ổn định, Memos hợp với ghi chú ngắn liên tục. [1]

So với dịch vụ ghi chú như Notion hay Evernote, Memos đổi sự tiện lợi của dịch vụ có sẵn lấy quyền kiểm soát dữ liệu và khả năng chạy trong mạng nội bộ. Tài liệu thiết kế Space có tham khảo Discourse, Notion Teamspaces và Mastodon, và chủ ý tránh quyền sở hữu trang chung cùng lớp kế thừa quyền nhiều tầng. [8]

So với công cụ ghi chú dựa trên tệp Markdown cục bộ như Obsidian hay Logseq, Memos có lợi thế chia sẻ qua web và cộng tác nhóm, nhưng dữ liệu nằm trong cơ sở dữ liệu thay vì thư mục tệp. Lựa chọn phụ thuộc vào việc ghi chú chủ yếu để cá nhân dùng hay để chia sẻ.

Khi nào Memos chưa đủ: cách ly khách hàng, đồng biên tập, sao lưu toàn tổ chức

Khi cần cách ly dữ liệu khách hàng trên một instance chung: Space không phải tenant, không có xác thực hay thiết lập riêng theo Space, và quản trị viên ứng dụng đọc được memo theo tên. Giải pháp là tách instance. [8]

Khi cần đồng biên tập, kiểm duyệt hay lịch sử kiểm toán: thiết kế Space loại trừ biên tập cộng tác và việc quản trị viên Space sửa memo của người khác; lời mời qua email, hết hạn lời mời, lịch sử kiểm toán và xóa mềm đều thuộc phần thiết kế hoãn lại. [8]

Khi cần sao lưu và chuyển cả tổ chức bằng một thao tác: xuất hiện chỉ theo người dùng, xuất theo instance hay Space còn là thiết kế hoãn lại, và gói xuất không mã hóa hay ký số. Cũng nên cân nhắc lại nếu không duy trì được nhịp cập nhật, vì bản vá bảo mật chỉ dành cho bản mới nhất. [4][9]

Thí điểm ba sprint với chỉ số đo được

Sprint 1, hai tuần: dựng instance thử bằng Docker với PostgreSQL sau reverse proxy có TLS, tạo hai Space cho hai đội tình nguyện, đặt quy ước nhãn và audience. Kiểm thử quyền theo kịch bản: người ngoài Space không thấy memo SPACE; memo PRIVATE của một thành viên không hiện với thành viên khác. Kế hoạch này là đề xuất; bài chưa có số đo nào. [4][8]

Sprint 2: đo tỷ lệ thành viên ghi ít nhất ba memo mỗi tuần, tỷ lệ buổi họp với khách có memo trong 24 giờ, và số câu hỏi tìm được đáp án trong 20 câu mẫu trưởng nhóm soạn từ memo đã có. Nếu thử MCP, dùng tài khoản dịch vụ có token riêng, ghi nhật ký công cụ được gọi và xác nhận agent không tạo hay xóa ngoài phạm vi. [6]

Sprint 3: diễn tập sao lưu và khôi phục cơ sở dữ liệu cùng tệp đính kèm sang máy khác, thử xuất và nhập memo cá nhân giữa hai instance với chính sách SKIP, thử nâng cấp bản vá. Dừng nếu tỷ lệ ghi chép thấp sau hai sprint, kiểm thử quyền thất bại hoặc khôi phục không trọn; mở rộng khi các chỉ số vượt mức mục tiêu ban kỹ thuật chốt từ đầu và đã có người vận hành chính thức. [9]

Kết luận: nhỏ gọn, sở hữu được, cần kỷ luật về quyền

Memos lấp khoảng trống giữa tin nhắn chat và tài liệu chính thức: ghi nhanh, tìm lại được, dữ liệu trong tay tổ chức. Space, định dạng xuất có đặc tả và cổng MCP khiến nó thành ứng viên đáng thử cho tri thức vụn của nhóm kỹ thuật. [1][6][8][9]

Giá trị phụ thuộc vào quy ước sử dụng và hiểu đúng mô hình quyền: audience quyết định ai đọc, Space không phải hàng rào khách hàng, quản trị viên thấy mọi memo khi truy cập theo tên.

Bắt đầu nhỏ, đo, rồi mới mở rộng; với dự án có NDA chặt, tách instance ngay từ đầu.

Về nguồn tư liệu và cách đọc bài này

Trong loạt bài, Memos nằm ở nhóm RAG và quản trị tri thức. Dự án được đưa vào danh sách nhờ kho lưu GitHub Trending theo ngôn ngữ của một bên độc lập, nơi trang ngày 02/01/2026 ghi usememos/memos trong mục Go. Kho chỉ theo dõi Python, Go, JavaScript, Swift và thiếu hai ngày 03/09, 12/10/2026, nên đây không phải danh sách Top 100 do GitHub công bố. [10]

Nguồn kỹ thuật là README, LICENSE, SECURITY.md, web/docs/auth-architecture.md, AGENTS.md, README của server/mcp và store/migration, cùng hai tài liệu thiết kế multi-spaces và memos-export-format, tại commit a80fe19ee1785913e6cb369182420a93f9010a48 (tạo ngày 12/10/2026, cũng là ngày kiểm tra). Hai tài liệu thiết kế ghi trạng thái đã hiện thực nhưng được đóng băng sau đó, nên chi tiết có thể đã khác trong mã. [1][2][3][4][5][6][7][8][9]

Bài được thực hiện bằng cách đọc tài liệu với sự trợ giúp của AI; Memos không được cài, không được chạy và không được đo hiệu năng, còn siêu dữ liệu kho cho thấy dự án chưa bị archived. Tình huống công ty gia công, ước lượng nguồn lực và kế hoạch thí điểm là đề xuất, và bài không có giá trị như một nghiên cứu được phản biện độc lập.

Xem mã nguồn Memos trên GitHub

Khám phá nghiên cứu của BDSG Foundation

Trao đổi về ứng dụng công nghệ cho doanh nghiệp