Stop making every agent start from scratch
One shared memory for multiple agents
Remember at the beginning of ChatGPT where for every conversation on the same topic you had to keep repeating the same information and make sure you mastered prompt engineering correctly so the model had context ?
Yeah me too, and that was annoying.
Then around April 2025, ChatGPT solved that partially with the Chat History reference. But the problem remained with Codex CLI and most other agents.
That’s one of the reasons that got me to use the Hermes Agent early on. It didn’t feel particularly special at the beginning, but after one week of using it I could already see the value of having an agent improving itself over time from my usage and memorizing things.
It quickly became my favourite agent and I ended up having it installed on my different machines and Sprites. Problem: what Hermes memorizes is bound per profile, plus a local SQLite database for session search, none of which is synced across hosts by default. Hermes’ docs recommend an external memory provider for shared memory, one of which is Honcho (see below).
In parallel, I was already using Pi, mostly for managing my local machine and VPS. I also use Ampcode, which comes with its own agent - Amp. And, finally, Claude Code, because until recently using Anthropic models with a subscription was only possible from that agent.
So I was back to square one, having to repeat myself across my fleet of agents, no way to grep which agent I had which conversation with, or, worse, having to manage skill markdown files myself. And handing off from one agent to the other is costly in tokens.
A solution ?
Then at the beginning of September, I came across this blog post from HuggingFace - Give Your Coding Agents a Memory You Own, where the author, David Corvoysier, described a situation very similar to mine and a solution: HuggingFace funes - a durable local memory from which any agent can recall:
Under the hood it’s a Lance dataset with a local model for embeddings, while recall fuses vector and BM25 search:
recall on Funes, opens the best hit with get, and checks the code as it is today before answering. Without that nudge an agent that merely has the tool rarely reaches for it. Illustrative example: the query is modelled on the long, keyword-dense ones agents really write, and the ripwire step is whatever code tooling your agent has.The simplicity of the setup is appealing. One binary (okay, two if you want to publish to a shared dataset, as it relies on TruffleHog to scan for secrets before anything leaves your machine) and no infrastructure to operate yourself. Your dataset can be published on a personal HF account, and it’s private by default.
Results
I have been using this memory for about two months now. Despite some initial quirks (see below), it made hopping between agents less of a broken record.
Funes is now set up on all my machines and devboxes. Some as read-only and some as read/write.
One cool thing with Funes is that funes add <agent> converts the supported agent’s existing local sessions into its spool and indexes them incrementally over time (starting with a 60s pass on the first setup, then backfilling in bounded steps on later turns), so you can recall work prior to the setup. If you are curious about where the conversations live, deja-vu has a pretty exhaustive list of where each agent stores its conversation history.
There are some CPU/GPU spikes when funes embeds new turns and when it reranks recall candidates, but that’s to be expected.
Gotchas
As with most agentic tools, the setup is a one-line install. But how do you make sure they are actually being used and being useful?
So I had one agent chart recall calls per agent. Some had never made one: their sessions went into the dataset, but nothing ever came back out.
The mistake I made was trusting the process, thinking it would magically add value to my exchanges. And to a certain extent, it did. However, I started noticing that some of my agents never reached for that memory.
Two (skill) issues:
- My Hermes agent had a working setup through MCP tools and lifecycle hooks, but nothing to instruct the agent to use funes when earlier work matters. The Funes integration for Hermes didn’t set up a SKILL.md that the agent would pick up, so recall hits were low until I noticed. The Claude Code bundle does ship a funes skill, however.
- One of my agent integrations (OMP), with no official Funes integration, wasn’t set up properly and wasn’t bound to the shared dataset hosted on HuggingFace, so it was indexing locally and not sharing the recalls from other agents. Without
funes bind <org>/<repo>or passing a dataset, Funes defaults to local-only indexing.
Alternatives ?
Yep, there are some but each with different trade-offs:
- claude-mem is probably the first one you’d come across. It has a different approach in that it uses an LLM to compress sessions into summaries, observations, or conclusions, unlike Funes, which stores verbatim chunks. This makes claude-mem more token-efficient, but at the cost of losing the original passage. Another notable difference is that it also tends to push the context to the session rather than it being only pulled.
- Honcho is a memory service going the same direction as claude-mem: it stores your messages, then runs models in the background that turn them into conclusions and peer cards, so the interpretation is pre-computed instead of worked out at read time.
- deja-vu is the closest to Funes but built differently: plain BM25 search with no model (embeddings are optional), reading the transcripts of many supported agents straight from disk, and, besides an MCP tool the agent can call, pushing recall into the session through hooks.
Drawn from each project's public docs at the time of writing.
note
A recent paper, Memory Tax: Dissecting the Net Value of Agent Memory, backs up the verbatim camp. Benchmarked against naive RAG over raw transcripts, most LLM-distilled memory systems score lower — the authors call this the memory tax: summarizing at write time drops details (faithfulness), rephrasing buries what’s left (accessibility), and tying the index to the model that wrote it makes recall brittle when you switch models (robustness). Their fix? Keep a direct path back to the raw turns.
Now what ?
Having your agents persist their memory can be not only useful to them, but also to you. And I’ll cover an example of how I use this dataset to generate a personal work journal next.
tip
Using Ampcode ?
If you are not, you are missing out. If you do, your orbs can benefit from Funes as well. Ask Puck - the meta agent - to set it up for you.
Mine includes a nightly Amp schedule that starts a fresh orb in a dedicated repository, where a single Node script exports every non-archived thread on the account, and Funes converts the sessions into chunk-stable turns. TruffleHog scans the push before it reaches the private Hugging Face dataset. This way, any of my projects, be it in Ampcode or not, can later recall what past sessions decided.