Recall:讓 Claude Code 在 VPS 保留工作記憶
Recall 是完全本機運作的 Claude Code 外掛,會記錄每次工作階段並整理成可延續摘要。本文示範在 VPS 安裝 Recall 0.4.0,並實測可節省多少 token。
Recall 對 Claude Code 記憶功能的作用
Recall 是 Claude Code 外掛程式,可讓每個專案在不同工作階段之間保留記憶。它會在專案內的 .recall/ 資料夾中寫入 2 個 Markdown 檔案:一個記錄已發生事件的僅可附加記錄檔,另一個則簡要摘要上次工作停止的位置。這 2 個檔案都由執行所在電腦上的本機 Python 摘要工具產生,因此記憶本身不會耗用任何 API token。
它解決的是一個規模雖小但持續存在的問題。您在 Tuesday 於 VPS 上結束工作階段。到了 Wednesday,Claude Code 完全不知道 Tuesday 發生的事情。您必須手動重新說明專案,或讓模型再次讀取半個儲存庫來了解狀況。這 2 種方式都會耗用 token,而第 2 種方式的耗用量會大很多。
截至 July 2026,Recall 的目前版本是 0.4.0,專案採用 MIT 授權。它是外掛程式,不會進行任何網路連線。
VPS 需要具備的條件
Recall 的擷取掛鉤是隨外掛發布的 Python 指令碼。不需要第三方相依套件,因此唯一的實際需求是直譯器。
python3 -VUbuntu 24.04 的回答是 Python 3.12.3。Recall 支援 Python 3.9 及更新版本。精簡容器映像有時完全沒有直譯器,此時 shell 會回答 python3: command not found。請先安裝直譯器,再繼續操作。
sudo apt update && sudo apt install -y python3NumPy 是摘要器其中一個步驟的選用加速元件。您不需要安裝它。
python3 -c "import numpy"ModuleNotFoundError: No module named 'numpy' 在此處是可接受的回答。摘要器提供純 Python 執行路徑,而專案的測試套件會檢查兩條路徑是否選取相同的句子。
工作階段記憶體對伺服器比對筆記型電腦更重要,因為伺服器工作會在數天內以短暫工作階段分批進行。如果您已在 VPS 上於 tmux 中執行 Claude Code,Recall 就是將昨天的工作階段延續到今天的元件。
從外掛市集安裝 Recall
在 Claude Code 工作階段中輸入以下 2 個命令:
/plugin marketplace add raiyanyahya/recall
/plugin install recall@recall第二個命令會讀取 plugin@marketplace。此處兩個名稱都是 recall,看起來像是複製貼上錯誤,但實際上不是。
執行外掛本身的命令,確認安裝是否成功:
/recall:show/recall:show 會列印目前的摘要。全新的專案尚無內容可列印,因此實際確認的是該命令是否存在。如果 Claude Code 不辨識 /recall:show,表示外掛尚未載入,因此不會執行任何 hook。
若要從 checkout 執行,請先複製儲存庫並進行驗證:
git clone https://github.com/raiyanyahya/recall ~/recall
cd ~/recall && claude plugin validate .claude plugin validate . 會讀取 .claude-plugin/ 中的資訊清單,並回報外掛的格式是否正確。接著從專案目錄使用 claude --plugin-dir ~/recall 啟動 Claude Code。
hooks 的寫入內容與時機
Recall 註冊了 3 個 Claude Code hooks。每個 hook 都會從外掛程式目錄執行 Python 指令碼。
SessionStart會在啟動、恢復及清除時觸發。它會顯示context.md,讓工作階段開啟時即可看到摘要。Stop會在 Claude 完成每次回應時觸發。它會將該回合附加至記錄檔。SessionEnd會在工作階段關閉時觸發,並可重新產生摘要。
這會產生 2 個檔案,兩者都位於 .recall/ 內。
history.md是只能附加內容的記錄:提示、回應、處理過的檔案,以及執行的命令。context.md是產生的摘要:目標、摘要、後續步驟、處理過的檔案、執行的命令,以及 git context。
完成一次實際工作階段後,查看該目錄。
ls -la .recall/您應該會看到其中包含內容的 history.md。您可能完全看不到 context.md,這是預設行為,不是故障。除非您設定 auto_save_context,否則其值為 off,因此只有在您要求時才會寫入摘要:
/recall:save該命令會對 history.md 執行本機摘要程式,並重寫 context.md。其演算法是 TF-IDF(term frequency, inverse document frequency)評分,再交由 TextRank 進行句子排名。此演算法具決定性且採擷取式處理,也就是選取記錄中原本已存在的句子。它不會呼叫模型,因此不收費,且可在離線的機器上運作。
為單一專案設定 Recall
設定位於專案根目錄中的 recall.config.json 檔案。以下是隨附的預設值:
{
"output_dir": ".recall",
"capture_history": true,
"summary_sentences": 8,
"redact": true,
"include_git": true,
"max_input_chars": 200000
}output_dir設定兩個檔案的存放位置。請將它們保留在專案內。capture_history用於開啟或關閉history.md記錄。auto_save_context接受off或on_end,預設值為off。summary_sentences設定保留至context.md的句子數量。提高此值會產生較長的摘要,並使工作階段啟動時的負載略微增加。redact會在任何內容寫入磁碟前,移除常見的機密模式。include_git會將目前的差異內容和近期提交加入摘要。max_input_chars限制摘要器每次讀取的history.md數量。
對於 VPS 上的專案,實用的變更是啟用自動儲存,因為伺服器上的工作階段通常會在終端機中斷時結束,而不是在你決定停止時結束。
{
"auto_save_context": "on_end",
"summary_sentences": 12
}若要暫停擷取一段時間而不修改設定,請建立暫停標記。刪除該標記即可再次開始擷取。
touch .recall/.capture-paused在處理生產環境憑證的工作階段前,請先執行此操作,因為遮蔽功能只是篩選器,並非保證。相同的原則也適用於一般情況下讓機器人代理程式無法取得機密:最安全的機密,是代理程式從未看見的機密。
Recall 可節省多少 token?
這取決於原本採用的替代方式。在工作階段開始時載入摘要,成本很低。但它取代的工作可能成本很高,因為沒有專案記憶的模型必須讀取檔案,重新了解專案。
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"
}
]以下是中型專案的典型數值,不是對您專案的測量結果。Recall 摘要載入時約需 1,200 個 token,這與專案公開宣稱的 resume 需 1,000 到 2,000 個 token 大致相符。重新播放完整的先前記錄會重新載入整段對話,約為 85,000 個 token。讓模型透過讀取檔案重新了解專案,成本介於兩者之間,約為 30,000 個 token;而且此數值會隨儲存庫大小增加。CLAUDE.md 列是用來作為比例參考:它較便宜,因為內容簡短且固定,並且告訴模型您一貫適用的規則,而不是昨晚發生的事情。
請測量您自己的數值。一個 token 大約相當於 4 個英文字元的散文;程式碼通常略少。
wc -c .recall/context.md .recall/history.md
echo $(( $(wc -c < .recall/context.md) / 4 ))在工作階段內,/context 會顯示目前載入至內容視窗的內容,/cost 則會回報工作階段的累計值。先以空白狀態啟動一個工作階段,再在已有摘要的情況下啟動下一個工作階段,然後比較兩者。如需完整了解工作階段的 token 實際用量,請參閱Claude Code 如何使用 token的明細。
有一項限制可讓這項說法保持準確。摘要會在每次工作階段開始時載入,因此,從未實際使用的摘要只是小額成本,而不是節省。除非您的工作階段執行時間很長,否則請讓 summary_sentences 維持接近預設值。
在沒有工作階段的情況下重新建立摘要
如果您已複製儲存庫,摘要工具有專用的命令列進入點。當 VPS 上的工作階段隨終端機一起中斷,而您仍需要摘要時,這項功能非常實用。
python3 ~/recall/scripts/make_context.py --help說明輸出會列出它接受的旗標:--cwd 用於指定專案根目錄,--transcript 用於指定明確的轉錄檔,--quiet 用於抑制輸出,--harness 用於在 claude 和 opencode 之間選擇。將它指向某個專案:
python3 ~/recall/scripts/make_context.py --cwd /srv/projects/api它會讀取工作階段轉錄內容和 history.md,然後在您傳入的目錄下寫入 context.md。如果您是透過 marketplace 安裝,外掛程式會位於由 Claude Code 管理的目錄中,而 /recall:save 是執行相同工作的支援方式。
為何沒有寫入任何內容
完整工作階段結束後沒有 .recall/ 目錄。 Hook 從未執行。輸入 /recall:show 確認外掛程式已載入,然後執行 python3 -V。Hook 命令會先嘗試 python3,再嘗試 python。因此,兩者皆不存在的環境不會寫入任何內容,也不會顯示錯誤。
history.md 持續增長,但 context.md 從未變更。 auto_save_context 預設為 off。執行 /recall:save,或將該鍵設為 on_end,再讓 SessionEnd hook 執行。
檔案出現在錯誤的專案下。 Recall 會以 Claude Code 啟動時所在的目錄作為相對路徑,因此從主目錄啟動工作階段時,記憶檔案會寫入該處。請從專案根目錄啟動,並使用 ls -la .recall/ 找出檔案實際寫入的位置。
擷取已停止,但沒有任何警告。 使用 ls -a .recall/ 檢查暫停標記。上週建立的 .capture-paused 檔案仍會持續生效。
長時間工作階段結束後,摘要內容很少。 max_input_chars 將摘要器輸入上限設為 200000 個字元,因此過長的記錄會遭截斷。請輪替記錄檔。
mv .recall/history.md .recall/history-2026-07-30.md接著執行一個簡短的工作階段,再次檢查 ls -la .recall/,確認已產生新的 history.md。
Recall 的適用範圍
Recall 由日誌和摘要工具組成,因此有必要明確說明它無法處理的內容。
摘要工具採用抽取式摘要。TextRank 會選取 history.md 中已存在的句子,因此不會判斷決策是否正確。週二記錄的錯誤方向,讀起來會和週三的正確決策完全相同。涉及實際風險時,請閱讀 context.md,並手動修正。它是 markdown 檔案,您可以直接編輯。
它沒有搜尋功能。每個專案只有一份目前摘要和一份持續增加的日誌,而不是可跨專案查詢的記憶。如果您想知道三週前對資料庫做了什麼決定,就必須對 history.md 執行 grep。
它無法協助處理工作階段內的問題。工作階段中途填滿 context window 是另一個問題,需要使用不同的修正方式;在單一工作階段內管理 context window 是本指南的配套文章。
摘要在設計上會被視為不受信任的輸入。context.md 會以 fenced 且標示清楚的內容注入,Claude 會在依據它行動前先詢問。這項設計是因為已提交的 .recall/ 目錄中,任何具有提交存取權的人都能寫入代理程式會讀取的文字。請先決定 .recall/ 是個人使用還是共用:個人記憶請將它加入 .gitignore;若要共用,請提交它,並像檢閱其他貢獻一樣檢閱其內容。如果代理程式會在無人介入的情況下執行,在 VPS 上安全執行 Claude Code 說明了更廣泛的安全邊界。
編輯還原只能盡力而為。它會處理 API keys、tokens、PEM blocks 和 .env assignments 等常見模式。提交前請閱讀 .recall/。
版本號如實反映其成熟度。2026 年 7 月的版本為 0.4.0,設定 keys 和檔案配置在不同 releases 之間仍可能變更,因此升級所依賴的設定前,請先閱讀 changelog。
FAQ
Recall 會將我的程式碼或文字記錄傳送到其他地方嗎?
不會。擷取掛鉤與摘要工具都是在您自己的機器上執行的 Python 指令碼。外掛程式不包含 API key,也不會進行網路呼叫。摘要使用 TF-IDF 和 TextRank,而不是模型,因此不會產生額外費用,也能在離線的機器上運作。代價是摘要採用擷取式方式:它會從記錄中選取句子,而不是產生新的句子。
為什麼我的 .recall/context.md 遺失或不是最新版本?
auto_save_context 預設為 off,因此只有在您執行 /recall:save 時才會重新產生摘要。在 recall.config.json 中設定 "auto_save_context": "on_end",即可讓系統在每個工作階段結束時重寫摘要。如果 history.md 也遺失,表示掛鉤完全沒有執行:使用 /recall:show 確認外掛程式已載入,然後確認該主機上的 python3 -V 能正常回應,因為這些掛鉤是 Python 指令碼。
Recall 每個工作階段可節省多少?
載入摘要約需 1,200 個 token;相較之下,模型若必須重新讀取您的儲存庫以判斷目前進度,通常需要 30,000 個 token。這些是一般估算值。請在工作階段內使用 wc -c .recall/context.md 和 /context 命令,將冷啟動與從摘要恢復的啟動進行比較,以測量您自己的數值。
我仍然需要 CLAUDE.md 檔案嗎?
需要,而且兩者用途不同。CLAUDE.md 是您刻意撰寫的內容,包括固定規則和建置命令。context.md 則是根據上一個工作階段實際發生的情況產生,因此會記錄您通常不會特別寫下的未完成移轉工作。請同時保留兩者。
一台 VPS 可以為多個專案保留記憶嗎?
可以。Recall 會將記憶保存在每個專案目錄中的 .recall/,因此同一台伺服器上的兩個專案會保有各自獨立的記錄和摘要。每次都請從專案根目錄啟動 Claude Code,因為這些檔案會依據工作目錄區分,而不是依據使用者帳戶區分。