你可能花了一小時釐清某個 parser 為何要修改,但換到下一個 agent 處理新任務時,這段推理就跟著消失了。Funes 會在本機索引 agent 工作階段,連同來源脈絡一併回傳原始證據,並可讓 Claude Code、Codex、pi 和 Hermes 共用同一份記憶。不過有個界線必須先講清楚:Funes 負責找回歷史內容,是否仍適用於當前情境,還是得由你的 agent 判斷。
本文會用 Claude Code → Codex 的實際設定流程,說明純本機記憶、可選的 Hugging Face 同步、通用 MCP 用戶端,以及如何檢查召回結果是否真的可靠。
安裝前,先決定記憶要留在哪裡
剛評估 Funes,或正在處理敏感 repository 時,建議先從本機記憶開始。只有在你需要跨機器或團隊共用同一段歷史時,才綁定 Hugging Face dataset。
| 模式 | 儲存位置 | 最適合的起點 | 主要注意事項 |
|---|---|---|---|
local | 本機 Lance dataset | 一位開發者、一台機器 | 記憶不會自動跟著你移到其他主機 |
<org>/<repo> | 本機 Lance 資料加上 Hugging Face Dataset repository | 在不同 agent 或機器之間切換 | 工作階段軌跡可能包含敏感程式碼、prompt、路徑或憑證 |
Funes security policy 指出,預設會在本機完成解析、切塊、embedding 與 reranking。資料會透過 funes push,或在工作階段邊界發布內容的共用記憶整合,才離開機器。Hub 支援的記憶本質上是 dataset repository,因此第一次 push 前,務必先確認它的可見性。
第一次試用請選 local。之後若要改綁定對象,重新執行 funes add <agent> <memory> 即可。
安裝 Funes,建立第一份索引
Funes 官方 repository 提供 shell 安裝程式,會偵測平台、下載帶有標籤的 binary、驗證 release checksum,並預設將執行檔放入 PATH 中的 ~/.local/bin:
curl -fsSL https://huggingface.co/buckets/huggingface/funes/resolve/install.sh | sh
如果系統暫時找不到 funes,請開啟新的 shell,再確認安裝狀態:
funes status
repository 目前列出 Linux x86_64、Linux aarch64 與 macOS Apple Silicon 的 tagged binary。若你的平台不在清單內,請依照專案的從原始碼建置說明操作,不要假設預編譯安裝程式一定支援。
五分鐘完成初始設定
請在你想保留其記憶的 agent 工作階段已存在的環境中執行:
funes add claude
對 Claude Code 而言,這個指令可建立第一份索引、註冊讀取工具、安裝整合自動化,並持續索引已完成的 turn。首次執行採 text-first 策略,確認後文件標示約需一分鐘;它會優先處理文字與推理內容,再處理龐大的 tool output。(Funes setup documentation)
接著查看目前狀態:
funes status
若要手動建立或更新 Claude 工作階段索引,請使用:
funes index --harness claude
未指定路徑時,funes index 會搜尋 Claude、Codex、pi 與 Hermes 的標準工作階段位置,包括 ~/.claude/projects 和 ~/.codex/sessions。加上 --harness claude 後,掃描範圍會限定在 Claude Code。indexing guide 也提到,未指定路徑的更新採約 60 秒的 text-first 預算;較舊的工作階段與大型 tool result 可能要等後續輪次才會補上。
Funes 的索引是增量式的,因此重複執行時不會重新 embedding 已寫入的 chunk。明確指定 transcript 路徑與 Hub trace repository 時,則會完整索引,不受未指定路徑時的預算限制。(Indexing details)
把 Funes 接到 Claude Code
要為 Claude Code 使用本機記憶,執行:
funes add claude local
funes status
local 是預設值,因此可以省略。如果終端機中已有 HF token,Funes 可能會詢問你是否要設定一個由使用者擁有的 <user>/funes-memory repository;若只是進行純本機測試,請拒絕這個提示。
Claude 整合採用只含 hooks 的 plugin,並另外註冊 MCP。Funes 不會修改 Claude Code 的 settings.json;它的自動化會索引完成的 turn,而共用記憶設定則會在工作階段邊界發布內容。(Automation behavior)
開啟 Claude Code 後,不要只看安裝是否成功;請用一項已知的歷史決策來測試:
Find the previous decision about the streaming parser. Use Funes recall if the repository history does not explain it, and cite the session you used.
理想的結果應該會指向先前的相關段落、標示其工作階段,並清楚區分舊實驗與目前 repository 的狀態。
若要撤除整合、但不刪除既有資料,請執行:
funes remove claude
removal documentation 說明,這會移除 Funes 的串接設定,但會保留本機記憶、原始 transcripts、cache 與已發布的記憶。
讓 Codex 使用同一份記憶
確認 Claude Code 正常運作後,將 Codex 加入同一份本機記憶:
funes add codex local
funes status
若要改用 Hub 支援的共用記憶,兩個 agent 都要指定同一個 repository identifier:
funes add claude <org>/<repo>
funes add codex <org>/<repo>
Codex 有一個很容易漏掉的信任步驟。Funes 會將 hooks 寫入 ~/.codex/hooks.json;進入 Codex 後,執行 /hooks,檢查 Funes 項目並將其設為信任。在 hooks 受到信任前,Codex 會略過它們,因此不會索引新的 turn,也不會發布記憶。文件所述的 bound-memory 流程要求 Codex 0.151.0。(Codex automation requirements)
實際測一次跨 agent 交接
選一個只出現在其中一個工作階段、且具辨識度的決策來測試:
- 在 Claude Code 找到 parser 的決策,記下一個討論中具辨識度的詞彙。
- 結束該工作階段,讓索引與邊界自動化有機會執行。
- 在 Codex 詢問該詞彙,並要求說明先前的推理。
- 確認回應標示 Claude 為來源 harness,並指向原始工作階段或 turn。
你也可以直接從終端機查看證據:
funes recall "why did we switch away from the streaming parser"
recall 回傳的是排序後的原始段落,不是生成式摘要。每筆結果都會包含來源資訊與產生的 get 指令;若需要查看前後 turn,直接複製該指令即可。
如果 Codex 沒有回傳內容,請檢查版本、/hooks 信任狀態、funes status,以及 Claude 工作階段是否早於整合設定。接著改用原始討論中更具辨識度的詞彙重試。
連接 pi、Hermes 或其他 MCP 用戶端
除了 Claude Code 和 Codex,Funes 也直接支援 pi 與 Hermes。Pi 使用 extension events;Hermes 使用 shell hooks,其每 turn 索引功能在文件中標記為 beta。(Supported-agent details)
若 MCP 相容的用戶端不在上述四者之列,可將 Funes 作為本機 stdio server 執行:
{
"mcpServers": {
"funes": {
"command": "funes",
"args": ["mcp"]
}
}
}
要讓 server 綁定共用記憶,請在 mcp 後加上 repository:
{
"mcpServers": {
"funes": {
"command": "funes",
"args": ["mcp", "<org>/<repo>"]
}
}
}
MCP documentation 提供 recall、get 與 status。funes mcp 僅供讀取:它不會索引工作階段,也不會發布資料。這類工作請使用 funes index、funes push,或受支援的 funes add 整合。
單次 MCP 呼叫中指定的記憶,會覆寫 server 層級的綁定。若兩者都沒有指定,Funes 會使用本機記憶。
使用 recall,同時保留可驗證的證據
Funes 有三種不同的使用方式:
| 指令 | 輸出內容 | 適用情境 |
|---|---|---|
funes recall "…" | 附帶來源脈絡、經排序的原始段落 | 想直接檢視證據 |
funes get … | 被引用的 turn 與周邊上下文 | 搜尋結果有關,但資訊仍不完整 |
funes ask <agent> "…" | 一則有依據的自然語言回答 | 不安裝整合,也想快速從 Claude 或 Codex 取得答案 |
文件記載的 recall 預設值為 8 筆命中、30 筆經 rerank 的候選結果、30 天 recency half-life,以及 1 個相鄰 chunk。(Recall flags and defaults)
一套可靠的除錯流程如下:
- 用錯誤訊息、元件名稱或決策關鍵句執行
funes recall。 - 使用產生的
get指令取得完整 turn。 - 將找回的決策與目前 branch 比對。
- 進行修改或執行實驗。
- 用實驗結果再次 recall,讓下一個工作階段能找到它。
funes ask 的用途較窄:它會先進行檢索,再把選中的段落和你的問題交給 Claude 或 Codex,產生一個回答。子 agent 不會取得 tools、stdin 或 MCP servers,且在第一次匹配不佳時無法重新嘗試檢索。雖然檢索在本機完成,但問題與召回的段落仍會傳送給所選 agent 設定的 provider。因此,ask documentation 建議,凡是不希望交給該 provider 的內容,都應使用 funes recall。
讓記憶保持可靠,也能穩定運作
Funes 會保留原始來源段落與其脈絡資訊,但它無法判定每個歷史 workaround 是否仍適用。
「當記憶只是無聊的基礎設施:本機索引、精確來源脈絡、預設私有,coding agents 就會少很多怪問題。」 — @TheArtemisHunts on X
一份精簡的正式環境檢查清單
| 情況 | 檢查項目 | 處理方式 |
|---|---|---|
| Codex 完全召回不到內容 | Hook 信任狀態與版本 | 執行 /hooks、信任 Funes 項目,並確認 Codex 為 0.151.0 |
| 缺少舊工作階段 | 索引範圍與層級 | 執行 funes index --harness claude 或 --harness codex;等待後續輪次補齊大型輸出 |
| 遠端 push 被阻擋 | TruffleHog 與 token scope | 安裝 TruffleHog 或設定 FUNES_TRUFFLEHOG;僅在負責 push 的機器使用 fine-grained write token |
| 結果中包含 secret | 本機 scrub 狀態 | 執行 funes scrub,接著再次 push;來源 transcripts 不會被修改 |
| 遠端記憶已與他人共用 | 可見性與信任 | 除非有意公開分享,否則 dataset 應維持 private,並將召回的第三方文字視為不受信任的 agent input |
| 最後一個工作階段尚未同步到 Hub | 邊界時間點 | 在汰換機器前執行 funes push <org>/<repo> |
Funes 會在索引時遮蔽憑證,並在發布前執行 fail-closed 的 TruffleHog 掃描。push documentation 指出,缺少 scanner 時會阻止發布;若有效憑證已進入遠端 dataset,請立即輪替,因為在後續 commit scrub 並無法抹除 repository 歷史。
Hugging Face token 應遵循最小權限原則:負責發布的機器使用 write scope,僅需 recall 的團隊成員或主機則使用 read-only scope。兩台機器同時發布到同一份遠端記憶也可能發生競爭;automation documentation 並未宣稱支援跨機器序列化。
實務上該怎麼選
不必一次裝好所有整合,可以依你的工作方式從以下其中一種設定開始:
| 工作流程 | 建議設定 | 原因 |
|---|---|---|
| 一位開發者評估持久記憶 | funes add claude local | 資料外流風險最低,也最容易回復原狀 |
| Claude Code 負責規劃,Codex 負責實作或 review | 兩者綁定至相同的 local 記憶 | 在同一台主機上保留跨 agent 的推理脈絡 |
| 多台機器上的 agents | 兩者綁定至相同的 private <org>/<repo> 記憶 | 透過 Hub dataset 讓記憶能隨開發者移動 |
| 團隊專案歷史 | Private dataset,加上給讀取者的 read-only tokens | 將發布權限與 recall 存取權限分開 |
| 不受支援的 MCP agent | funes mcp [memory] | 加入讀取能力,同時維持明確的索引流程 |
| 敏感來源資料 | 本機記憶加上 recall | 避免遠端發布,也避免單次傳送給 provider |
Funes coding agent memory 常見問題
Funes 是本機工具嗎?
Funes 預設會在本機處理及儲存記憶。它採 local-first,而非自動 local-only:push、共用記憶 hooks 與 ask 都可能讓資料離開本機程序。
Funes 能搭配 Claude Code 和 Codex 使用嗎?
可以。funes add 支援 Claude Code、Codex、pi 與 Hermes。Codex 的記憶綁定需要 0.151.0,以及已受信任的 hooks。
Funes 會自動索引工作階段嗎?
執行 funes add 後,受支援的整合會安裝每 turn 索引自動化。初始 bootstrap 有時間限制,因此較舊的工作階段與龐大的 tool result 可能需要後續輪次處理。
如何讓 Claude Code 和 Codex 共用一份記憶?
對 funes add claude 與 funes add codex 使用相同的 <org>/<repo> 參數。Funes 會將工作用索引保留在本機,並在工作階段邊界發布共用 dataset。
如果 Funes 找回的是過時決策,該怎麼辦?
先用 funes recall 查看內容,再透過產生的 get 指令展開上下文,確認與目前 branch 一致後再採取行動。第一次檢索失準時,請換一種方式改寫查詢。
funes ask 的資料會留在我的機器上嗎?
檢索與 reranking 都在本機進行,但 ask 會將問題與召回段落傳送給設定好的 Claude 或 Codex provider。敏感證據請使用 recall。
可以移除 Funes 而不刪除記憶嗎?
可以。funes remove claude、funes remove codex、funes remove pi 與 funes remove hermes 會移除整合設定,但保留已索引的記憶與來源 transcripts。