
Bộ nhớ sửa lỗi cho Claude Code bằng Postgres cục bộ
Một MCP server nhỏ ghi lại mọi lần bạn duyệt, sửa hay từ chối draft của Claude Code, rồi chèn lại qua hook — kèm các giới hạn tác giả tự nhận.
Bạn sửa cho agent một lỗi nhỏ — một dấu chấm than trong release note, một lời hứa về thời gian giao hàng mà đội bạn không cam kết được. Session kết thúc, session sau nó lặp lại đúng lỗi đó. Một developer vừa công bố cách anh ta xử lý: một MCP server nhỏ chạy Postgres cục bộ, ghi lại mọi lần bạn duyệt, sửa hoặc từ chối, kèm lý do.
Vì sao CLAUDE.md không giải quyết được
Tác giả tách hai loại kiến thức rất rõ. CLAUDE.md tốt cho những quy tắc luôn luôn áp dụng. Nó dở ở loại còn lại: các chỉnh sửa chỉ có ý nghĩa trong một tình huống tương tự. Theo mô tả của anh, nhét hết loại thứ hai vào CLAUDE.md thì file biến thành "một bức tường các trường hợp đặc biệt mà agent chỉ lướt qua".
Đây là một phân biệt đáng mang về đội bạn kể cả khi bạn không cài gì: quy tắc toàn cục thì viết vào file hướng dẫn, còn chỉnh sửa theo ngữ cảnh thì cần một cơ chế truy xuất theo độ tương đồng.
Năm tool và nơi lưu
Server phơi ra năm tool: recall_corrections(task) gọi trước khi soạn, trả về các quy tắc thường trực rồi tới các quyết định cũ trên tác vụ tương tự, xếp theo độ giống giảm dần; record_decision(...) gọi sau khi bạn duyệt, sửa hoặc từ chối; add_rule(), list_memory() và forget(id) lo phần quy tắc và dọn dẹp.
Toàn bộ dữ liệu nằm trong một Postgres cục bộ tại ~/.feedback-memory. Theo tác giả, đó là PGlite — Postgres biên dịch sang WebAssembly — kèm pgvector, nên không cần Docker và không có gì phải host. Cài bằng một lệnh:
claude mcp add feedback-memory -- npx -y github:ssap-pa/self-learning-agent-setup
Chi tiết kỹ thuật đáng chú ý nhất: hook, không phải tool
Tác giả nêu thẳng vấn đề mà nhiều MCP server tự chế mắc phải: "một MCP tool mà agent không bao giờ gọi thì là code chết". Anh xử lý bằng hai lớp.
Lớp một là mô tả tool nói rõ khi nào gọi chứ không chỉ làm gì. Nhưng theo chính anh, đó vẫn chỉ là lời đề nghị — agent phải nhớ gọi, và đó là điểm yếu.
Lớp hai mới là phần đáng học: đóng gói thành Claude Code plugin với hai hook không hỏi xin. SessionStart chèn các quy tắc thường trực khi session bắt đầu, và chèn lại sau /clear hoặc sau compaction. UserPromptSubmit chèn các quyết định cũ gần nhất thẳng vào prompt, mỗi quyết định một lần mỗi session để session dài không bị lấp đầy bởi bản lặp.
Ràng buộc đi kèm: PGlite là single-process, nên hook không mở được database khi server đang giữ. Server vì thế ghi một snapshot JSON cạnh database sau mỗi thay đổi, và chạy hai client thì phải cấp hai thư mục qua FEEDBACK_MEMORY_DIR.
Những gì tác giả tự nhận là chưa làm được
Phần giới hạn đáng đọc hơn phần demo. Theo bài viết: không có UI nào ngoài list_memory; khi không có API key, hệ thống băm từ khoá offline nên "tương tự" chỉ có nghĩa là trùng từ — và hook prompt của plugin luôn khớp theo từ trùng kể cả khi server đã có OpenAI key; quan trọng nhất, hệ thống không biết agent có thực sự làm theo thứ nó vừa nhớ lại hay không. Tác giả gọi đó là phần anh sẽ xem tiếp.
Lưu ý nguồn: đây là bài tự giới thiệu sản phẩm của chính tác giả, kèm liên kết Product Hunt và trang bán sách. Kết quả chạy thử được mô tả là một lần chạy của anh với database trống, không phải một phép đo độc lập.
Thử trong 15 phút
Trước khi cài gì, hãy mở lại năm chỉnh sửa gần nhất bạn đã lặp lại cho agent và phân loại: quy tắc toàn cục, hay chỉnh sửa theo ngữ cảnh? Nếu phần lớn rơi vào nhóm thứ hai, CLAUDE.md sẽ không cứu bạn — và hướng hook, chèn thẳng vào prompt, là hướng đáng thử trước.
Không spam, hủy đăng ký bất kỳ lúc nào.


