That Obsidian + Claude Code guide that made the rounds here a while back got me thinking. The vault approach works, but you end up maintaining a lot of machinery by hand: frontmatter standards, session log formats, custom /compress and /resume skills, archive logic for when CLAUDE.md gets too big. The structure only works as long as you keep feeding it.
I wanted the same outcome with less ceremony, so I built a different version of it. Full disclosure up front: I'm the author of the tool I'm about to describe. It's open source (Apache 2.0) and you can self-host it, so I hope that buys me some grace.
The problem, same as everyone's
Claude Code forgets everything between sessions. CLAUDE.md helps until it turns into a 400-line junk drawer. And even a well-groomed CLAUDE.md is stuck in one project folder on one machine. The context I built up in Cursor at work is invisible to Claude Code at home, and Claude Desktop knows nothing about either.
The idea
Instead of memory living in markdown files the agent has to manage, memory is a service the agent calls over MCP. While it works, it saves the stuff worth keeping: decisions and why they were made, gotchas, patterns, things I tell it to remember. Next session (any tool, any machine) it recalls by meaning, so "what did we decide about auth?" just works. No folder structure, no tagging, nothing for me to maintain.
It's called SenseLab. Under the hood it's a memory engine called AMFS with versioned entries, confidence scores, and decision traces, but day to day you don't think about any of that.
Setup (2 minutes)
Grab an API key from the dashboard at sense-lab.ai, then one command wires up Claude Code, Cursor, and Claude Desktop:
curl -sSL https://raw.githubusercontent.com/raia-live/amfs/main/install-mcp.sh | bash -s -- --api-key amfs_sk_your_key
Or add it to your MCP config by hand:
{
"mcpServers": {
"senselab": {
"command": "uvx",
"args": ["amfs-mcp-server-pro"],
"env": {
"AMFS_HTTP_URL": "https://amfs-login.sense-lab.ai",
"AMFS_API_KEY": "amfs_sk_your_key"
}
}
}
}
The installer also drops a small skill into ~/.claude so Claude Code checks memory before answering "do you remember..." questions instead of shrugging. That behavioral piece matters more than I expected. The tools being available isn't enough, the model needs a nudge to actually use them.
What a day looks like
Start of session: I ask Claude to get briefed on whatever I'm touching. It pulls a compiled summary of everything stored about that project: recent decisions, known risks, what past sessions figured out. This replaces /resume.
During work: when we settle something ("use JWT, 15 min expiry, silent refresh"), it records the decision with the reasoning attached. This replaces manually curating CLAUDE.md.
End of session: it commits the session as a trace. Later I can ask "why did we pick JWT?" and get the actual chain: what it read, what it knew, what was decided. This replaces /compress, and honestly goes further, because it's queryable instead of a log file I'd have to grep.
The part I didn't expect to care about
Entries have confidence that decays over time, and every entry knows which agent wrote it and when. So stale hypotheses fade instead of polluting context forever, and when memory contradicts itself you can see which entry is fresher and better validated. A markdown vault treats a note from 8 months ago and a note from yesterday as equally true. This doesn't.
Happy to answer setup questions in the comments. And genuinely curious: for those of you running the vault approach, what does your session-to-session handoff look like, and what breaks first?