funes: コーディングエージェント向けの耐久性のあるメモリレイヤー
TL;DR
Hugging Faceはfunesをリリースしました。これは軽量でローカルで実行されるメモリシステムであり、コーディングエージェントのセッションログをインデックス化・検索可能なデータセットに変換し、Claude Code、Codex、pi、Hermesなどのエージェントが、リモートサービスにデータを送信せずに、マシンやモデルをまたいで正確な過去のやり取りを思い出せるようにします。
既存エージェントへのワンコマンドメモリ統合
重要なポイント: funesをエージェントに追加するには、funes add <agent>コマンドを1つ実行するだけでよく、初期インデックスの構築、recallとgetツールの挿入、完了したすべてのターンに対するインクリメンタルインデックス化の設定が行われます。
curl -fsSL https://huggingface.co/buckets/huggingface/funes/resolve/install.sh | sh
funes add claude # または codex, pi, hermes
- デフォルトの推論バックエンドにはMLランタイムの依存関係が一切ありません。埋め込みと再順序付けはすべてユーザーのマシン上で実行されます。
- インデックス化はインクリメンタルです:過去の履歴を再埋め込みすることなく、新しいターンが埋め込まれて追加されます。
recallはターンの元のテキストを、出典メタデータ(エージェント、タイムスタンプ、セッション、ターン)と周辺コンテキストを開くためのgetコマンドとともに返します。
"funesを追加すると、recallは会話の中で自動的に発生します。エージェントは自ら記憶を呼び出し、その回答の裏にあるセッションを明示します。"
確定的パイプラインとランクアーキテクチャ
重要なポイント: funesはすべての対応するトレース形式を一貫したターンとブロック表現に正規化し、その後、確定的なパイプラインで処理します。
- 各ターンのチャンク化。
- ピンされたローカルモデルによる埋め込み。
- ローカルのLance追加専用データセットへの保存。
- クエリはベクトル類似性とBM25を組み合わせ、ランクを統合し、クロスエンコーダで再順序付け、最新性に基づいて重みを再調整し、隣接するチャンクを付加します。
この設計により、以下の3つの重要な特性が得られます:
- エージェント間での統一されたメモリ – すべての対応エージェントが同じ形式で書き込みを行うため、
recallはClaude Code、Codex、pi、Hermesの履歴をまたいで利用可能になります。 - 生の証拠がそのまま保持される – 書き込み時に要約を行わないため、すべての結果は正確なターンに遡ることができます。
- デフォルトでローカル動作 – インデックス化、埋め込み、再順序付けにはHubアカウントや外部サービスが不要です。
メモリをホスティングサービスではなくデータセットとして扱う
重要なポイント: funesはメモリをLanceデータセットとして扱い、必要に応じてプライベートなHugging Faceデータセットに公開できるため、マシン間でのシームレスなポータビリティが実現します。
funes add codex acme/funes-memory # リモートデータセットにバインド
- 公開時に認証情報はマスクされます。セキュリティスキャナー(
SECURITY.mdにドキュメント化)はアップロード前に明らかなシークレットを削除します。 - リモートメモリはローカルにキャッシュされるため、以降のクエリはローカル速度で実行されますが、Hubは所有権、アクセス制御、バージョン管理、配布を提供します。
- このワークフローは、別個のメモリとしてのサービスアカウントを作成しません。同じバイナリがローカルとリモートの両方のメモリを提供し続けます。
ask と recall:一時的なクエリ vs. 統合されたワークフロー
重要なポイント: funes askを使えば、永続的なエージェント統合をインストールせずに、メモリに対して単一の質問を投げることができます。
funes ask claude "what did we decide about the streaming parser"
# または公開されたメモリに対して
funes ask claude "why is funes append-only" --memory huggingface/funes-memory
- コマンドは関連する文章を取得し、選択されたコーディングエージェントに渡して、根拠のある回答(出典を明示)を返します。
- 取得された文章が回答を支持しない場合、エージェントは明確にその制限を表明し、再表現や
funes addによる完全統合を促します。
エージェント間の連続性を失うことなく、コンテキストを保持
重要なポイント: メモリがモデルに依存しないデータセットであるため、Claude Codeで開始したタスクは、別のマシンでCodex(または任意の対応エージェント)で継続でき、後続のエージェントは以前の推論をrecallできます。
- マシン間:各ホストのエージェントを同じリモートメモリにバインドすることで、スレッドの連続性を維持できます。
- チーム間:新しいチームメンバーは、共有メモリから数か月分の決定、失敗、根拠を直接取得できます。
- オープンソースプロジェクト:メンテナはリリースと同時にメモリを公開し、検索可能でバージョン管理された
CLAUDE.mdを作成することで、意思決定の全過程を記録できます。
公開されたメモリはHub上でfunesタグで検索可能であり、誰でも--memoryを使って公開プロジェクトの履歴をクエリできます。
セッションの圧縮やハンドオフのコスト効率の高い代替手段
重要なポイント: ハンドオフ vs. リコールベンチマークにおいて、リコールは1つのタスクではハンドオフの8倍安価で、別のタスクでは4倍安価でありながら、生の証拠を保持しています。
- 圧縮(要約)はしばしば重要な詳細を失い、2つのベンチマークタスクのうち1つで失敗を引き起こしました。
- リコールは元の文章を返すため、要約の必要がなく、トークン使用量も削減されます。

オープンソース基盤とコミュニティ参加
重要なポイント: funesは既存のオープンソースコンポーネントに基づいています:
- 外部APIなしで実行可能なローカル埋め込みモデル。
- 安価なインクリメンタル書き込みに適したLance追加専用データセット。
- Hugging Face Hubのデータセットキャッシュと重複削除機能。
プロジェクトは完全にオープンソースで、https://github.com/huggingface/funesで公開されています。インストールの問題、見逃されたリコール、追加エージェントサポートのリクエストなどは、Issueをオープンすることを歓迎します。
結論: funesは、それ otherwise 静的なコーディングエージェントのログを、ローカルで動作し、プライベートデータセットとして共有可能で、エージェント間・マシン間のシームレスな連続性を可能にする、アクティブで検索可能なメモリに変換します。すべては1つのコマンドと外部サービスの依存関係なしで実現されます。