Cách cài đặt Recall để lưu bộ nhớ cho Claude Code trên VPS
Hướng dẫn cài đặt Recall giúp Claude Code ghi nhớ phiên làm việc trên VPS. Plugin này tự động tóm tắt dự án vào file markdown cục bộ, giúp bạn tiết kiệm token API hiệu quả.
Recall hỗ trợ bộ nhớ cho Claude Code như thế nào
Recall là một plugin của Claude Code giúp mỗi dự án có bộ nhớ xuyên suốt các phiên làm việc. Nó ghi hai tệp markdown vào thư mục .recall/ bên trong dự án của bạn: một nhật ký chỉ ghi thêm (append-only) về những gì đã xảy ra và một bản tóm tắt ngắn gọn về trạng thái công việc hiện tại. Cả hai tệp này đều được tạo trên máy bạn đang làm việc bởi một trình tóm tắt Python cục bộ, vì vậy bản thân bộ nhớ này không tốn bất kỳ token API nào.
Khoảng trống mà nó lấp đầy tuy nhỏ nhưng thường xuyên xảy ra. Bạn đóng phiên làm việc trên VPS vào thứ Ba. Đến thứ Tư, Claude Code không biết gì về những gì đã xảy ra vào thứ Ba. Bạn phải giải thích lại dự án theo cách thủ công, hoặc để model đọc lại một nửa repository để tự tìm hiểu. Cả hai cách đều tốn token, và cách thứ hai tốn rất nhiều.
Recall phiên bản 0.4.0 là phiên bản hiện tại tính đến tháng 7 năm 2026 và dự án được cấp phép theo MIT. Đây là một plugin. Không có thành phần nào trong đó thực hiện gọi mạng (network call).
Những gì bạn cần trên VPS
Các hook thu thập của Recall là các script Python đi kèm với plugin. Không có phụ thuộc bên thứ ba nào, vì vậy yêu cầu thực tế duy nhất là một trình thông dịch.
python3 -VUbuntu 24.04 trả về Python 3.12.3. Recall hỗ trợ Python 3.9 trở lên. Các image container tối giản đôi khi không có sẵn trình thông dịch, khi đó shell sẽ trả về python3: command not found. Hãy cài đặt một trình thông dịch trước khi tiếp tục.
sudo apt update && sudo apt install -y python3NumPy là một bộ tăng tốc tùy chọn cho một bước của trình tóm tắt. Bạn không bắt buộc phải có nó.
python3 -c "import numpy"ModuleNotFoundError: No module named 'numpy' là một câu trả lời chấp nhận được ở đây. Trình tóm tắt có một đường dẫn thuần Python và bộ kiểm thử của dự án đảm bảo rằng cả hai đường dẫn đều chọn ra cùng các câu.
Bộ nhớ phiên làm việc quan trọng trên server hơn là trên laptop, vì công việc trên server thường đến trong các lượt truy cập ngắn rải rác qua nhiều ngày. Nếu bạn đã có Claude Code chạy trong tmux trên VPS, Recall chính là thành phần giúp chuyển tiếp phiên làm việc của ngày hôm qua sang ngày hôm nay.
Cài đặt Recall từ marketplace của plugin
Hai lệnh, được nhập bên trong phiên làm việc của Claude Code:
/plugin marketplace add raiyanyahya/recall
/plugin install recall@recallLệnh thứ hai đọc là plugin@marketplace. Cả hai tên đều là recall ở đây, trông có vẻ là lỗi sao chép-dán nhưng thực tế không phải vậy.
Kiểm tra việc cài đặt bằng cách chạy một trong các lệnh của chính plugin:
/recall:show/recall:show in ra bản tóm tắt hiện tại. Trên một dự án hoàn toàn mới, chưa có gì để in ra, vì vậy điều bạn thực sự đang kiểm tra là lệnh đó có tồn tại hay không. Nếu Claude Code không nhận diện được /recall:show, nghĩa là plugin chưa được tải và sẽ không có hook nào được kích hoạt.
Để chạy từ một bản checkout thay thế, hãy clone repository và xác thực nó trước:
git clone https://github.com/raiyanyahya/recall ~/recall
cd ~/recall && claude plugin validate .claude plugin validate . đọc file manifest trong .claude-plugin/ và báo cáo xem plugin có được định dạng đúng hay không. Sau đó, khởi chạy Claude Code từ thư mục dự án của bạn với claude --plugin-dir ~/recall.
Các hook ghi gì và khi nào
Recall đăng ký ba hook cho Claude Code. Mỗi hook chạy một script Python từ thư mục plugin.
SessionStartkích hoạt khi khởi động, tiếp tục và xóa phiên làm việc. Nó hiển thịcontext.mdđể phiên làm việc mở ra với bản tóm tắt của bạn trong tầm nhìn.Stopkích hoạt mỗi khi Claude hoàn tất một phản hồi. Nó ghi thêm lượt đó vào log.SessionEndkích hoạt khi đóng phiên làm việc và có thể tạo lại bản tóm tắt.
Hai tệp được tạo ra từ quá trình này, cả hai đều nằm trong .recall/.
history.mdlà bản ghi chỉ cho phép ghi thêm: các prompt, phản hồi, tệp đã truy cập và lệnh đã chạy.context.mdlà bản tóm tắt được tạo: mục tiêu, tóm tắt, các bước tiếp theo, tệp đã truy cập, lệnh đã chạy và ngữ cảnh git.
Sau một phiên làm việc thực tế, hãy kiểm tra thư mục.
ls -la .recall/Bạn sẽ thấy history.md có chứa nội dung. Bạn có thể không thấy context.md, đây là hành vi mặc định chứ không phải lỗi. auto_save_context là off trừ khi bạn thiết lập nó, vì vậy bản tóm tắt chỉ được ghi khi bạn yêu cầu:
/recall:saveLệnh đó chạy trình tóm tắt cục bộ trên history.md và ghi đè context.md. Thuật toán sử dụng là TF-IDF (tần suất thuật ngữ, nghịch đảo tần suất tài liệu) để cung cấp dữ liệu cho việc xếp hạng câu bằng TextRank. Nó mang tính xác định và trích xuất, nghĩa là nó chọn các câu đã tồn tại trong log của bạn. Không có model nào được gọi, vì vậy bước này miễn phí và hoạt động khi máy offline.
Cấu hình Recall cho một dự án
Cấu hình nằm trong tệp recall.config.json tại thư mục gốc của dự án. Đây là các giá trị mặc định được phát hành:
{
"output_dir": ".recall",
"capture_history": true,
"summary_sentences": 8,
"redact": true,
"include_git": true,
"max_input_chars": 200000
}output_dirthiết lập vị trí lưu trữ hai tệp này. Hãy giữ nó bên trong dự án.capture_historybật hoặc tắt loghistory.md.auto_save_contextchấp nhậnoffhoặcon_end, giá trị mặc định làoff.summary_sentenceslà số lượng câu được giữ lại trongcontext.md. Tăng giá trị này giúp có bản tóm tắt dài hơn và tải nặng hơn một chút khi bắt đầu phiên làm việc.redactloại bỏ các mẫu bí mật phổ biến trước khi ghi bất cứ thứ gì vào đĩa.include_gitthêm diff hiện tại và các commit gần đây vào bản tóm tắt.max_input_charsgiới hạn lượng dữ liệu từhistory.mdmà bộ tóm tắt đọc trong một lần xử lý.
Đối với một dự án trên VPS, thay đổi hữu ích là tính năng tự động lưu, vì phiên làm việc trên server thường kết thúc khi terminal bị ngắt thay vì khi bạn quyết định dừng lại.
{
"auto_save_context": "on_end",
"summary_sentences": 12
}Để tạm dừng ghi lại trong một khoảng thời gian mà không cần thay đổi cấu hình, hãy tạo tệp đánh dấu tạm dừng. Xóa tệp này để bắt đầu ghi lại.
touch .recall/.capture-pausedHãy thực hiện việc này trước một phiên làm việc mà bạn xử lý các thông tin xác thực production, vì tính năng che giấu (redaction) chỉ là một bộ lọc chứ không phải là sự đảm bảo tuyệt đối. Lý do tương tự dẫn đến việc giữ bí mật không để AI agent thấy nói chung: bí mật an toàn nhất là bí mật mà agent không bao giờ nhìn thấy.
Recall tiết kiệm được bao nhiêu token?
Điều này phụ thuộc vào phương án thay thế là gì. Tải một bản tóm tắt khi bắt đầu phiên làm việc rất rẻ. Những gì nó thay thế có thể rất đắt đỏ, vì một model không có bộ nhớ về dự án của bạn sẽ phải đọc lại các tệp tin để tìm hiểu lại từ đầu.
The data behind this chart
[
{
"label": "Recall context.md",
"char_count": "4,800",
"est_tokens": "1,200"
},
{
"label": "Hand-written CLAUDE.md",
"char_count": "3,200",
"est_tokens": "800"
},
{
"label": "Re-reading the repo",
"char_count": "120,000",
"est_tokens": "30,000"
},
{
"label": "Full transcript replay",
"char_count": "340,000",
"est_tokens": "85,000"
}
]Đây là các con số điển hình cho một dự án quy mô trung bình, không phải phép đo cho dự án của bạn. Một bản tóm tắt của Recall tải khoảng 1,200 token, khớp với tuyên bố của dự án là từ một đến hai nghìn token cho một bản tóm tắt. Việc phát lại toàn bộ transcript trước đó sẽ tải lại toàn bộ cuộc hội thoại, rơi vào khoảng 85,000 token. Để model tự tìm hiểu lại dự án bằng cách đọc tệp tin sẽ nằm ở giữa hai mức trên, gần 30,000 token, và con số này sẽ tăng lên theo quy mô của repository. Dòng CLAUDE.md ở đó để làm thang đo: nó rẻ hơn vì nó ngắn và tĩnh, đồng thời nó cung cấp cho model các quy tắc cố định của bạn thay vì những gì đã xảy ra vào tối hôm trước.
Hãy tự đo lường các con số của riêng bạn. Một token tương đương khoảng bốn ký tự văn bản tiếng Anh, và ít hơn một chút đối với mã nguồn.
wc -c .recall/context.md .recall/history.md
echo $(( $(wc -c < .recall/context.md) / 4 ))Trong một phiên làm việc, /context hiển thị những gì đang được tải vào context window ngay lúc này, và /cost báo cáo tổng số token của phiên đó. Hãy bắt đầu một phiên làm việc mới hoàn toàn, sau đó bắt đầu phiên tiếp theo với một bản tóm tắt đã có sẵn, rồi so sánh. Để có cái nhìn đầy đủ về việc token của một phiên thực sự được sử dụng vào đâu, cách Claude Code tiêu thụ token có bảng phân tích chi tiết.
Một lưu ý nhỏ để giữ tính chính xác cho tuyên bố này. Bản tóm tắt được tải mỗi khi bắt đầu phiên làm việc, vì vậy một bản tóm tắt mà bạn không bao giờ sử dụng đến sẽ là một khoản phí nhỏ thay vì là sự tiết kiệm. Hãy giữ summary_sentences gần mức mặc định trừ khi các phiên làm việc của bạn kéo dài.
Xây dựng lại bản tóm tắt mà không cần phiên làm việc
Nếu bạn đã clone repository, trình tóm tắt có điểm truy cập dòng lệnh riêng. Điều này hữu ích trên VPS khi phiên làm việc bị ngắt cùng với terminal và bạn vẫn muốn có bản tóm tắt.
python3 ~/recall/scripts/make_context.py --helpĐầu ra trợ giúp liệt kê các flag mà nó chấp nhận: --cwd cho thư mục gốc của dự án, --transcript cho một tệp transcript cụ thể, --quiet để ẩn đầu ra và --harness để chọn giữa claude và opencode. Hãy trỏ nó vào một dự án:
python3 ~/recall/scripts/make_context.py --cwd /srv/projects/apiNó đọc transcript của phiên làm việc và history.md, sau đó ghi context.md vào thư mục bạn đã truyền vào. Nếu bạn đã cài đặt thông qua marketplace, plugin nằm trong một thư mục do Claude Code quản lý và /recall:save là cách được hỗ trợ để thực hiện cùng công việc đó.
Tại sao không có dữ liệu nào được ghi
Không có thư mục .recall/ sau một phiên làm việc đầy đủ. Các hook chưa bao giờ chạy. Gõ /recall:show để xác nhận plugin đã được tải, sau đó chạy python3 -V. Lệnh hook thử python3 trước và python sau, vì vậy một máy chủ không có cả hai sẽ không ghi gì cả và giữ im lặng về điều đó.
history.md tăng lên nhưng context.md không bao giờ thay đổi. auto_save_context được đặt là off theo mặc định. Hãy chạy /recall:save, hoặc đặt khóa thành on_end và để hook SessionEnd thực hiện việc đó.
Các tệp xuất hiện sai dự án. Recall ghi dữ liệu tương đối so với thư mục mà Claude Code được khởi chạy, vì vậy việc bắt đầu một phiên từ thư mục home sẽ đặt bộ nhớ tại đó. Hãy bắt đầu từ root của dự án và sử dụng ls -la .recall/ để tìm nơi các tệp thực sự được lưu.
Quá trình ghi bị dừng và không có cảnh báo. Kiểm tra dấu hiệu tạm dừng bằng ls -a .recall/. Một tệp .capture-paused mà bạn đã tạo tuần trước vẫn đang thực hiện công việc của nó.
Bản tóm tắt quá sơ sài sau một phiên dài. max_input_chars giới hạn đầu vào của bộ tóm tắt ở mức 200000 ký tự, vì vậy một log quá dài sẽ bị cắt bớt. Hãy xoay vòng nó.
mv .recall/history.md .recall/history-2026-07-30.mdChạy một phiên ngắn sau đó và kiểm tra lại ls -la .recall/ để xác nhận một history.md mới đã xuất hiện.
Nơi Recall dừng lại
Recall là một log kết hợp với trình tóm tắt, và cần làm rõ những gì nó không bao gồm.
Trình tóm tắt hoạt động theo cơ chế trích xuất. TextRank chọn các câu đã có sẵn trong history.md, vì vậy nó không bao giờ đánh giá liệu một quyết định có đúng đắn hay không. Một hướng đi sai lầm được ghi lại vào thứ Ba trông vẫn giống hệt một quyết định đúng đắn vào thứ Tư. Khi các vấn đề quan trọng, hãy đọc context.md và tự tay chỉnh sửa. Đó là một tệp markdown và không có gì ngăn cản bạn chỉnh sửa nó.
Không có tính năng tìm kiếm. Bạn nhận được một bản tóm tắt hiện tại và một log đang tăng dần cho mỗi dự án, chứ không phải một bộ nhớ có thể truy vấn trên nhiều dự án. Nếu câu hỏi là bạn đã quyết định gì về database ba tuần trước, bạn phải dùng grep trên history.md.
Nó không hỗ trợ bên trong một phiên làm việc. Một context window bị đầy giữa phiên là một vấn đề khác với các cách khắc phục khác, và quản lý context window trong một phiên là bài viết bổ trợ cho hướng dẫn này.
Bản tóm tắt được thiết kế để xử lý như một đầu vào không đáng tin cậy. context.md được chèn vào trong các khối được gắn nhãn, và Claude sẽ hỏi trước khi dựa vào nó. Thiết kế đó tồn tại vì một thư mục .recall/ đã được commit là nơi bất kỳ ai có quyền commit đều có thể viết văn bản mà agent của bạn sẽ đọc. Hãy quyết định một lần xem .recall/ là cá nhân hay dùng chung: thêm nó vào .gitignore để làm bộ nhớ cá nhân, hoặc commit nó và review như bất kỳ đóng góp nào khác. Nếu agent chạy tự động, chạy Claude Code an toàn trên VPS sẽ bao quát phạm vi rộng hơn.
Việc ẩn thông tin (redaction) chỉ là nỗ lực tốt nhất. Nó nhắm vào các mẫu phổ biến như API keys, token, các khối PEM và các phép gán .env. Hãy đọc .recall/ trước khi bạn commit nó.
Số phiên bản phản ánh đúng mức độ hoàn thiện. Tại phiên bản 0.4.0 vào tháng 7 năm 2026, các config key và cấu trúc tệp vẫn có thể thay đổi giữa các bản releases, vì vậy hãy đọc changelog trước khi nâng cấp một thiết lập mà bạn đang phụ thuộc vào.
FAQ
Recall có gửi mã nguồn hoặc bản ghi của tôi đi đâu không?
Không. Các hook thu thập và trình tóm tắt là các script Python chạy trên máy của bạn, plugin không lưu trữ bất kỳ API key nào và không thực hiện bất kỳ cuộc gọi mạng nào. Việc tóm tắt sử dụng TF-IDF và TextRank thay vì một model, vì vậy bước này không tốn phí và hoạt động khi máy offline. Đánh đổi là bản tóm tắt mang tính trích xuất: nó chọn các câu từ log của bạn thay vì viết mới.
Tại sao .recall/context.md của tôi bị thiếu hoặc lỗi thời?
auto_save_context mặc định là off, vì vậy bản tóm tắt chỉ được tạo lại khi bạn chạy /recall:save. Hãy thiết lập "auto_save_context": "on_end" trong recall.config.json để nó được viết lại khi mỗi phiên làm việc kết thúc. Nếu history.md cũng bị thiếu, nghĩa là các hook không chạy: hãy xác nhận plugin đã được load bằng /recall:show, sau đó xác nhận python3 -V phản hồi trên máy đó, vì các hook là các script Python.
Recall tiết kiệm được bao nhiêu cho mỗi phiên làm việc?
Việc load một bản tóm tắt tốn khoảng 1,200 token so với 30,000 token cho một model phải đọc lại repository của bạn để xác định vị trí hiện tại. Đó là các con số điển hình. Hãy tự đo lường bằng wc -c .recall/context.md và lệnh /context bên trong một phiên làm việc, so sánh giữa khởi động lạnh (cold start) và phiên tiếp tục từ bản tóm tắt.
Tôi có còn cần file CLAUDE.md không?
Có, và cả hai thực hiện các công việc khác nhau. CLAUDE.md là những gì bạn chủ động viết: các quy tắc cố định và các lệnh build. context.md được tạo từ những gì thực sự đã xảy ra trong phiên trước, vì vậy nó lưu giữ quá trình migration đang dở dang mà bạn có thể không nghĩ đến việc ghi lại. Hãy giữ cả hai.
Một VPS có thể lưu trữ bộ nhớ cho nhiều dự án không?
Có. Recall lưu trữ bộ nhớ trong .recall/ bên trong thư mục của mỗi dự án, vì vậy hai dự án trên cùng một server sẽ giữ các log và bản tóm tắt riêng biệt. Hãy khởi chạy Claude Code từ root của dự án mỗi lần, vì các file này đi theo thư mục làm việc chứ không phải tài khoản người dùng.