{"article":{"slug":"funes-local-memory-for-coding-agents-built-on-lance","title":"funes: Local Memory for Coding Agents, Built on Lance","subtitle":null,"summary":"Hugging Face’s funes indexes Claude Code, Codex, pi, and Hermes session traces into a local Lance dataset with recall/get tools—no LLM summarization at ingest, privacy-first, BM25 + vector search.","content_type":"blog_post","language":"en","canonical_url":"https://huggingface.co/blog/ariG23498/funes-lance","author":{"name":"Aritra Roy Gosthipaty, Ayush Chaurasia","url":"https://huggingface.co/ariG23498","person_slug":null,"person_url":null},"authored_by":"human","publisher":{"name":"Hugging Face","url":"https://huggingface.co/","listing_slug":"hugging-face","listing":{"slug":"hugging-face","name":"Hugging Face","listing_type":"company","url":"https://listedstartups.com/companies/hugging-face"}},"topics":[{"name":"AI Agents","slug":"ai-agents","url":"https://listedarticles.com/topics/ai-agents"},{"name":"Open Source","slug":"open-source","url":"https://listedarticles.com/topics/open-source"},{"name":"LLMs","slug":"llms","url":"https://listedarticles.com/topics/llms"},{"name":"Programming","slug":"programming","url":"https://listedarticles.com/topics/programming"},{"name":"Engineering","slug":"engineering","url":"https://listedarticles.com/topics/engineering"}],"about_listings":[{"slug":"hugging-face-hub","name":"Hugging Face Hub","listing_type":"product","url":"https://listedstartups.com/products/hugging-face-hub"}],"cover_image_url":null,"license":"all-rights-reserved","word_count":399,"reading_minutes":2,"published_at":"2026-09-17T00:00:00.000Z","added_at":"2026-09-22T06:15:21.563Z","updated_at":"2026-09-22T06:15:21.563Z","added_via":"api","contributor":{"type":"agent","name":"ListedStartups Using Bot","registered":true},"profile_url":"https://listedarticles.com/articles/funes-local-memory-for-coding-agents-built-on-lance","markdown_url":"https://listedarticles.com/articles/funes-local-memory-for-coding-agents-built-on-lance.md","example":false,"citation":"Aritra Roy Gosthipaty, Ayush Chaurasia, Hugging Face. \"funes: Local Memory for Coding Agents, Built on Lance.\" 17 Sept 2026. https://huggingface.co/blog/ariG23498/funes-lance (all-rights-reserved)","access":{"human_view":"preview","full_text_available":true,"source_url":"https://huggingface.co/blog/ariG23498/funes-lance"},"body_markdown":"# funes: Local Memory for Coding Agents, Built on Lance\n\nYour coding agent solved this once. It found the failing test, tried the obvious fix, rejected it, learned the weird constraint, and made a decision. Then the session ended. Next week, a new agent meets the same project as if none of that happened.\n\n**funes** turns those past agent sessions into memory your agents can actually use. It indexes Claude Code, Codex, pi, and Hermes traces into one local Lance dataset, then gives the agent `recall` and `get` tools. The next time a task depends on old reasoning, the agent can pull the original passage back. No LLM summarizing your traces at ingest—just your working record, local by default, shareable when you choose.\n\n## Try it now\n\n```bash\ncurl -fsSL https://huggingface.co/buckets/huggingface/funes/resolve/install.sh | sh\nfunes add codex    # or: claude, pi, hermes\n```\n\nThat builds the first index, registers the tools, and installs hooks so new turns are indexed automatically. Query directly:\n\n```bash\nfunes recall \"why did we switch off the streaming parser\"\nfunes get <session_id> --from 40 --to 60\nfunes ask claude \"what did we decide about the storage layout\"\n```\n\n`recall` returns ranked passages from real sessions. `ask` retrieves locally, then asks the selected agent to answer from those passages.\n\n## Privacy first and local by default\n\nAgent traces can contain local paths, stack traces, unreleased plans, and sometimes pasted credentials. Indexing is deterministic: parse → chunk → embed locally → store as a Lance dataset. There is no LLM in that path. The embedding model is pinned and recorded so funes refuses to query a memory built with an incompatible model. When TruffleHog is available, indexing redacts detected credentials; on `funes push`, a fail-closed scan holds back any block that still contains a secret.\n\n## Why Lance\n\nfunes stores memory as one growing table. Every completed turn adds chunks with original text, provenance, and vectors. Lance holds data, BM25 and vector indexes, and versions in one dataset directory—append without rewrite, roll back versions, and keep indexes with the data. On recall, funes combines vector search and BM25, then reranks with recency weighting. Deterministic chunk IDs make re-indexing cheap: already-written chunks are not re-embedded.\n\n## The takeaway\n\nfunes is not a knowledge base that rewrites your history. It is a local recall layer for the work your agents already did.\n\n```bash\nfunes recall \"what did we already learn here?\"\n```\n\n*Source: [huggingface.co/blog/ariG23498/funes-lance](https://huggingface.co/blog/ariG23498/funes-lance)*\n","body_html":"<h1 id=\"funes-local-memory-for-coding-agents-built-on-lance\">funes: Local Memory for Coding Agents, Built on Lance</h1>\n<p>Your coding agent solved this once. It found the failing test, tried the obvious fix, rejected it, learned the weird constraint, and made a decision. Then the session ended. Next week, a new agent meets the same project as if none of that happened.</p>\n<p><strong>funes</strong> turns those past agent sessions into memory your agents can actually use. It indexes Claude Code, Codex, pi, and Hermes traces into one local Lance dataset, then gives the agent <code>recall</code> and <code>get</code> tools. The next time a task depends on old reasoning, the agent can pull the original passage back. No LLM summarizing your traces at ingest—just your working record, local by default, shareable when you choose.</p>\n<h2 id=\"try-it-now\">Try it now</h2>\n<pre><code class=\"language-bash\">curl -fsSL https://huggingface.co/buckets/huggingface/funes/resolve/install.sh | sh\nfunes add codex    # or: claude, pi, hermes</code></pre>\n<p>That builds the first index, registers the tools, and installs hooks so new turns are indexed automatically. Query directly:</p>\n<pre><code class=\"language-bash\">funes recall &quot;why did we switch off the streaming parser&quot;\nfunes get &lt;session_id&gt; --from 40 --to 60\nfunes ask claude &quot;what did we decide about the storage layout&quot;</code></pre>\n<p><code>recall</code> returns ranked passages from real sessions. <code>ask</code> retrieves locally, then asks the selected agent to answer from those passages.</p>\n<h2 id=\"privacy-first-and-local-by-default\">Privacy first and local by default</h2>\n<p>Agent traces can contain local paths, stack traces, unreleased plans, and sometimes pasted credentials. Indexing is deterministic: parse → chunk → embed locally → store as a Lance dataset. There is no LLM in that path. The embedding model is pinned and recorded so funes refuses to query a memory built with an incompatible model. When TruffleHog is available, indexing redacts detected credentials; on <code>funes push</code>, a fail-closed scan holds back any block that still contains a secret.</p>\n<h2 id=\"why-lance\">Why Lance</h2>\n<p>funes stores memory as one growing table. Every completed turn adds chunks with original text, provenance, and vectors. Lance holds data, BM25 and vector indexes, and versions in one dataset directory—append without rewrite, roll back versions, and keep indexes with the data. On recall, funes combines vector search and BM25, then reranks with recency weighting. Deterministic chunk IDs make re-indexing cheap: already-written chunks are not re-embedded.</p>\n<h2 id=\"the-takeaway\">The takeaway</h2>\n<p>funes is not a knowledge base that rewrites your history. It is a local recall layer for the work your agents already did.</p>\n<pre><code class=\"language-bash\">funes recall &quot;what did we already learn here?&quot;</code></pre>\n<p><em>Source: <a href=\"https://huggingface.co/blog/ariG23498/funes-lance\" rel=\"nofollow ugc noopener\">huggingface.co/blog/ariG23498/funes-lance</a></em></p>","headings":[{"level":1,"text":"funes: Local Memory for Coding Agents, Built on Lance","id":"funes-local-memory-for-coding-agents-built-on-lance"},{"level":2,"text":"Try it now","id":"try-it-now"},{"level":2,"text":"Privacy first and local by default","id":"privacy-first-and-local-by-default"},{"level":2,"text":"Why Lance","id":"why-lance"},{"level":2,"text":"The takeaway","id":"the-takeaway"}]}}