AgentHubAgentHub
Back to Blog

Give Your Coding Agents a Memory You Own

Hugging Face··10 min read·52 views
Give Your Coding Agents a Memory You Own
Source: Hugging Face
View Original Article

Give Your Coding Agents a Memory You Own

I work across several machines, and I switch coding agents depending on the task. Every one of them meets my projects as a stranger. The reasoning from “last Tuesday” disappears when the session ends. Each new agent, on each new host, starts from zero.

Earlier this year, Software Forgets: Agent Traces Are the Memory made the case that coding agents already produce the record we keep losing. As they search a codebase, try approaches, hit errors, read documentation, and change direction, they leave behind a dense account of not just what changed, but why.

While the diagnosis is correct, traces are only potential memory. The session logs of an agent are still just an archive. You cannot grep your way to “why did we move off the streaming parser?” across ten thousand turns. For an agent to use those traces while it works, they need indexing, retrieval, ranking, and exact provenance.

That is what funes provides. It is a durable memory layer for your agents (Claude Code, Codex, pi, and Hermes). It is built from the sessions already on your machine. It works locally and becomes part of your agent's normal workflow with one command. When you want it to, it can also travel to a Hugging Face dataset you own, private by default.

Add memory to the agent you already use

funes is a single binary. Its default inference backend has no ML runtime dependency, and embedding and reranking happen on your machine. Install it:

curl -fsSL https://huggingface.co/buckets/huggingface/funes/resolve/install.sh | sh

Then add it to an agent:

funes add claude    # or: codex, pi, hermes

That one add command builds the first index, gives the agent recall and get tools, and installs the automation that indexes each completed turn. Indexing is incremental, with new runs adding new turns rather than embedding the whole history again. The older and deeper content can backfill in bounded steps.

From there, you just work. When a task touches a past decision, rationale, or finding, the agent can reach for recall itself. You do not need to remember the old session or paste its context into the new one.

A coding agent reaches for funes on its own, recalls an earlier decision, and grounds its answer in the retrieved session
A coding agent reaches for funes on its own, recalls an earlier decision, and grounds its answer in the retrieved session

[!NOTE] With funes added, recall happens inside the conversation. The agent reaches for its memory on its own and names the session behind its answer.

recall returns the original text, not a summary, and shows exactly where it came from (the agent, timestamp, session, and turn). Each result includes a get command that opens the full turn and its surrounding context.

Underneath, one deterministic pipeline parses every supported trace into the same turn-and-block shape, chunks it, embeds it with a pinned local model, and writes it to a local Lance dataset. A query combines vector and BM25 search, fuses their rankings, reranks the candidates with a cross-encoder, reweights them by recency, and attaches neighboring chunks.

That design gives funes three important properties:

  • One memory across agents: Claude Code, Codex, pi, and Hermes all write to the same shape. recall spans their histories, and every hit says which agent produced it.
  • Raw evidence stays intact: Nothing is distilled into a fact at write time. A result can always lead back to the turn that produced it.
  • recall is local by default: No account or Hub repository is required. A hosted model does not process your sessions for indexing; embedding and reranking run on your machine, and your coding agent does the reasoning.

The agent as a stranger problem is already solved on one machine. But memory gets more useful when the next agent is running somewhere else.

A memory is a dataset, not a service

To make a memory follow your work, bind one when you add funes to an agent:

funes add codex acme/funes-memory

The bind publishes your current memory there. funes then keeps it current, indexing each turn locally and publishing at session boundaries. The agent recalls from it throughout. Run the same command on another machine and the memory follows you there.

Underneath, the local memory is a Lance dataset, and the shared memory is a Hugging Face dataset (private by default) you own.

Before anything reaches the Hub, credentials have already been redacted during indexing. Publishing then scans every chunk again and withholds anything that still looks like a secret. The scanner behind this is documented in SECURITY.md, including what it does and doesn't cover.

When an agent reads a remote memory, funes caches the dataset files locally, so warm queries return to local speed. The Hub supplies the ownership, access control, versioning, and distribution it already supplies for other datasets. Your memory does not become an account in a separate memory service, and you do not rent it back through an API.

Ask first, wire later

recall is shaped for agents. When you want to put a question to a memory yourself, use ask. It reads your local memory by default:

funes ask claude "what did we decide about the streaming parser"

Or point it at a shared memory. We published a memory of funes development, so you can ask why funes works the way it does without creating a memory of your own:

funes ask claude "why is funes append-only" --memory huggingface/funes-memory

Asking the published funes memory why it is append-only; funes retrieves the relevant sessions and a coding agent answers from them
Asking the published funes memory why it is append-only; funes retrieves the relevant sessions and a coding agent answers from them

[!NOTE] funes ask is the read-only, one-question sibling of funes add. It recalls the passages, hands them to a coding agent, and returns a grounded answer that names its sources. It does not install an integration or change the agent's persistent setup.

A retrieval miss is not papered over. If the passages do not support an answer, the agent says so. You can rephrase the question or add funes to the agent so it can search the memory iteratively during normal work.

Switching agents without losing the thread

A shared memory is not tied to the agent or model that created it. Start a task in Claude Code, continue it in Codex next week, and the second agent can recall the first agent's reasoning. Use pi with a local model or one served through the Hugging Face router, then return to Claude.

Claude Code chooses an embedding model, then Codex recalls that decision in a separate session
Claude Code chooses an embedding model, then Codex recalls that decision in a separate session

Claude makes a decision; a hook indexes it; Codex recalls it in another session. The older hits in the demo are earlier recordings of the same experiment: an append-only memory remembered the rehearsals too.

This matters in a few different scopes:

  • Across your machines: Bind each agent to one memory and recall the history from whichever host you are using.
  • Across a team: A new teammate's agent can retrieve months of decisions on day one, including dead ends and rationale that never made it into a pull request.
  • Alongside an open-source project: A maintainer can publish the sessions behind a release, naming them on the push. Think of it as a searchable CLAUDE.md that holds the history of why the project is the way it is, instead of a page someone must keep rewriting. Anyone can read a public memory with --memory.

Published memories carry a dataset card and the funes tag, making them recognizable and discoverable on the Hub. The Hub already hosts open weights and datasets. funes adds open working memory. It holds the decisions, failed approaches, and rationale behind a project, queryable by another agent and traceable to the sessions that produced them.

The cheapest way out of a long session

A long investigation bloats a session until each turn costs more to carry the context than to do the work. The usual answers are to let the agent compact and carry on, or to write a handoff and start fresh. Recall is a third, so we measured them against each other on the handoff-vs-recall benchmark: two tasks whose answer cannot be reconstructed without the session prior knowledge.

Compaction is what most agents do by default, and it was the only one of the three whose result divided: it arrived on one task and never arrived on the other. Where it failed, its summary had flattened the findings that mattered. Recall returns the passages themselves, so a finding does not have to survive summarization.

Recall was the cheapest of the three on both tasks, 8x cheaper than a written handoff on one and 4x on the other.

Weighted tokens per successful task for five channels across two tasks, with recall the shortest bar on both
Weighted tokens per successful task for five channels across two tasks, with recall the shortest bar on both

The lighter segment of each bar is the one-time charge for preparing the channel, the handoff or the compaction, paid before the first question is asked and counted once. A cross marks a channel that never arrives, and so has no cost per success.

Stop starting from zero

“To think is to forget differences, generalize, make abstractions.” — Jorge Luis Borges, Funes the Memorious

Your agents already wrote the record. funes lives at github.com/huggingface/funes, one command away from turning that record into a memory the next agent can read, on whichever machine you happen to be on.

Built on open source

funes invents little of this. It leans on open-source embedding models good enough to run locally, on Lance's append-only datasets with cheap incremental writes, and on the Hub's caching and content-dedup for datasets. The work is in fitting them into a memory an agent can actually use.

funes is open source too. Open an issue for anything from an install snag to a recall that missed, or an agent you'd like supported.

版权与学习声明:本文整理自海外公开技术博客【Hugging Face】,原文版权归原作者所有。中文对照版本主要用于中文开发者社区的技术交流与知识探索,严禁用于商业侵权。

Related Articles

Trends & News

Gemini 4 登场了:输出 100 万 token、幻觉率降到 15.1%,但你现在还用不上

9 月 30 日谷歌发布 Gemini 4 这一代的首款旗舰 Argon:单次输出上限 100 万 token、每百万 tokens 输入 2 美元、主打能连续干几小时的长流程任务,距上一条旗舰线隔了 10 个多月。但它第一批只向网络安全防御机构开放,公众可用时间谷歌没有公布。这篇把发布稿里的数字翻译成人话:为什么媒体给出的“领先 12 项 / 13 项 / 14 项”都不一样、它在从零建项目和终端操作两项上落后约 10 个百分点、独立评测里幻觉率 15.1% 很好看但知识答对率只有 49.9%(两个数必须一起看),以及普通人现在该做的三个动作。

Trends & News

MCP 简史:675 天换过五版规范,从 6 个示例服务器到 247 家机构

2024 年 11 月 25 日,Anthropic 用六个示例服务器和一个桌面客户端发布 MCP;到今天 675 天,它换过五版规范、SDK 累计下载破 10 亿、协议本身交给 247 家机构参与的中立基金会。这篇按版本把每一步改了什么、为什么改、竞品何时进场、鉴权与安全怎么补课一次讲清,并给出五条能直接用在选型上的判断。

Trends & News

中国大模型三年:从 8 款备案到 1112 款,从发布会竞赛到港交所敲钟

2023 到 2026,中国大模型走了三条线:备案数从 8 涨到 1112,API 价格从"没人报价"打到永久砍半,开源许可从自定义条款走到 MIT 与 Apache 2.0,最后智谱和 MiniMax 在 2026 年 1 月前后脚上市。这篇按四年时间顺序,只写能查到公开出处的节点。

Trends & News

从图灵到智能体:人工智能 76 年兴衰史,为什么爆发恰好是现在?

1956 年达特茅斯的狂想、两次经费寒冬、专家系统的崩塌、深蓝的暴力美学、2012 年深度学习春天、ChatGPT 时刻,直到 2026 年智能体全面爆发——复盘 AI 七十六年兴衰曲线会发现:每次引爆都不是“更聪明”,而是算法、算力、数据、执行、成本这块木桶恰好补齐了新板子。看懂这条规律,也就看懂了今天的 Muse、Jev 与 API 价格战。

Explore AI Ecosystem

Ready to take action? Explore AI tools & MCPs

Discover ChatGPT 6, Claude 3.7, Devin and 3000+ open-source MCP tools with 1-click config.

Give Your Coding Agents a Memory You Own - AgentHub