Skip to main content

One shared, durable memory for all your AI coding agents โ€” MCP, local-first, zero-dependency.

Project description

๐ŸŒณ Yggdrasil

One shared, durable memory for all your AI coding agents.
Claude Code, Codex, and any MCP host remember your decisions, lessons, and project status โ€” across sessions, tools, and projects.

Latest release PyPI Elastic License 2.0 Python 3.10+ zero deps MCP local-first alpha

Quick Start ยท How it works ยท Compare ยท Commands ยท FAQ

English ะ ัƒััะบะธะน ็ฎ€ไฝ“ไธญๆ–‡ Espaรฑol Franรงais ๆ—ฅๆœฌ่ชž Deutsch


Every new chat, your AI forgets. You re-explain the project, the decisions, the gotchas โ€” every time, in every tool. Yggdrasil is a tiny always-on memory brain that any agent plugs into. Open a new session, in any project, with any AI, and it already knows what you decided, what broke, and what's still open โ€” and it keeps learning in the background.

$ cd ~/projects/checkout-api && claude        # a brand-new session

๐ŸŒณ Yggdrasil  (injected automatically at session start)
   Open follow-ups & status:
   โ€ข [project_status] payments refactor: idempotency keys added; open: e2e tests
   Durable memory for `checkout-api`:
   โ€ข [debugging_lesson] webhook 401 โ†’ signing secret rotated; update env + redeploy

> "have I solved a flaky websocket reconnect anywhere before?"

๐ŸŒณ recall โ†’ found in project `realtime-dash`:
   refresh the token *before* opening the socket, then retry with capped backoff.

No "let me remind you what we did yesterday." It's just there.

Why

Without Yggdrasil you re-explain context in every new chat, lessons from one project never reach the next, switching Claude Code โ†’ Codex starts from zero, and hard-won debugging insights die with the session.

With Yggdrasil:

  • ๐Ÿง  Persistent memory โ€” decisions, lessons, and status survive across sessions.
  • ๐Ÿ”Œ Any agent, one brain โ€” Claude Code, Codex, any MCP host share the same memory.
  • ๐ŸŒ Cross-project recall โ€” "this looks like what you did in project B โ€” reuse it?"
  • ๐ŸŒฑ Self-learning โ€” a local model consolidates memory in the background (zero API tokens).
  • ๐Ÿชช A soul โ€” give it a name and personality; it shows up the same in every tool.
  • ๐Ÿ”’ 100% local & private โ€” your memory lives on your machine. No cloud, no account.

๐Ÿš€ Quick Start

Requirements: macOS (Linux/Windows soon), Python 3.10+ โ€” or let uv/npx fetch Python for you. Semantic search is optional and uses a local Ollama model.

Option A โ€” install as a plugin (one step, right inside your agent โ€” zero-config). In Claude Code:

/plugin marketplace add VonderVuflya/Yggdrasil
/plugin install yggdrasil

The engine lazy-starts on first use and generates its own local token โ€” no API key, no cloud, nothing to configure. (Codex and Cursor use the same flow.)

Option B โ€” install the full service (always-on daemon + auto-inject at session start + optional local models):

uvx --from yggdrasil-memory ygg install      # one-time guided setup
Every install channel (same engine)
Host / tool Command
Claude Code ยท Codex ยท Cursor (plugin) /plugin marketplace add VonderVuflya/Yggdrasil โ†’ /plugin install yggdrasil
uvx (recommended CLI) uvx --from yggdrasil-memory ygg install
npm / npx npx yggdrasil-memory install
pipx pipx install yggdrasil-memory && ygg install
pip pip install yggdrasil-memory && ygg install
Homebrew (macOS) brew install VonderVuflya/tap/yggdrasil && ygg install
Claude Desktop (app) drag the .mcpb from the latest release onto Settings โ†’ Extensions (guide)
from source uvx --from git+https://github.com/VonderVuflya/yggdrasil.git ygg install

ygg install is a one-time guided setup: it detects your hardware and recommends a local model that fits (or pick none for a zero-config, lexical-only setup), generates a private auth token, installs an always-on background service, and registers the tools with Claude Code and Codex.

Verify & use:

ygg doctor       # engine ยท models ยท MCP registration ยท hook โ€” all green?

Then just work. Ask your agent "recall what we decided about this project", or tell it "remember this decision" โ€” and in the next session it's already there.

Just kicking the tyres? uvx --from yggdrasil-memory ygg serve --reset --db /tmp/ygg.sqlite.

๐Ÿ”Œ More ways to connect

Beyond the plugin and ygg install above:

  • ๐Ÿ–ฅ๏ธ Claude Desktop (app) โ€” install the MCP extension: grab yggdrasil-<version>.mcpb from the latest release (or packaging/mcpb/), drag it onto Settings โ†’ Extensions, and paste your token (ygg token). The desktop app now shares the same memory as your CLI agents. โ†’ setup guide
  • ๐Ÿง  Skill (any Claude) โ€” the yggdrasil-memory skill teaches the agent the workflow: recall before work, remember after. Upload yggdrasil-memory.zip via Settings โ†’ Skills โ†’ Create skill โ†’ Upload a skill.

MCP vs Skill: MCP connects the tools (how to reach memory); the Skill teaches when to use them. Use both for the best behavior.

๐Ÿง  How it works

Yggdrasil is memory + tools โ€” the intelligence is your LLM. It just makes sure the right memory is in front of the right agent at the right moment.

  • ๐Ÿ›Ž๏ธ Always-on daemon โ€” a tiny local service (~21 MB RAM) your agents reach over MCP tools (ygg_search, ygg_recall, ygg_remember โ€ฆ).
  • ๐Ÿช Session start โ€” a hook auto-injects identity, project status, and open follow-ups.
  • ๐Ÿ“Œ Ranking โ€” frequently-recalled and pinned memories surface higher (storage & tiers below โ†“).
  • ๐Ÿงน Governance โ€” duplicates / conflicts are surfaced for review; changes are non-destructive (archive, never delete).
  • ๐Ÿ““ Obsidian โ€” every memory is also a Markdown note you can read and edit.

๐ŸŽ›๏ธ Memory tiers โ€” zero-config by default

Out of the box, Yggdrasil runs on SQLite + FTS5 with zero dependencies โ€” instant keyword (lexical) search, no models, no GPU, nothing to download. Already useful: recall@1 โ‰ˆ 0.77.

Want it to match by meaning and across languages? If your hardware allows, ygg install can pull optional local models via Ollama โ€” it detects your CPU/RAM/GPU and recommends a fit (or choose none to stay zero-config). Two optional, independent tiers:

   your agents โ”€โ–บ ygg_search / ygg_recall / ygg_remember
                             โ”‚
                 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                 โ”‚   SQLite  (storage)    โ”‚
                 โ”‚   โ”œโ”€ FTS5 / BM25  โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ–บ  keyword search   (always ยท zero-dep)
                 โ”‚   โ””โ”€ embedding column โ”€โ”ผโ”€โ–บ  vector search    (optional)
                 โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ฒโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                             โ”‚ vectors in
       optional ยท local:  Ollama models โ”€โ”€ only COMPUTE vectors / run consolidation
Tier You add You gain
0 ยท default nothing โ€” SQLite + FTS5 keyword search, zero deps, instant โ€” recall@1 โ‰ˆ 0.77
1 ยท semantic an embedding model via Ollama (e.g. all-minilm 45 MB ยท paraphrase-multilingual ~560 MB) search by meaning + cross-lingual โ€” recall@1 โ‰ˆ 0.94
2 ยท self-learning a small consolidation LLM via Ollama (e.g. qwen2.5:1.5b ~1 GB) background dedupe/merge of memory (propose-safe)

Ollama only computes the vectors / runs the background model โ€” the vectors and all memories still live in the same SQLite. Tiers are independent and opt-in.

Full model menu (or run ygg recommend)

Embeddings (semantic search):

Model Size Good for
all-minilm 45 MB English, tiny & fast
nomic-embed-text 274 MB English, better quality
paraphrase-multilingual ~560 MB multilingual (EN/RU + 50 langs)
bge-m3 1.2 GB multilingual, top quality (heavier)

Background consolidation (small LLM):

Model Size Good for
qwen2.5:0.5b ~400 MB tiny, fast on CPU
qwen2.5:1.5b ~1 GB best CPU default
llama3.2:3b ~2 GB better quality, slower on CPU

Everything stays 100% local โ€” zero API tokens, no cloud. The installer recommends models that fit your hardware (or pick none to stay zero-config).

The engine itself is swappable โ€” any service meeting the MemoryBackend contract is a drop-in (point YGG_ENGINE_URL at it); SQLite is the zero-dep default. See docs/backend-boundary.md.

๐Ÿ†š Yggdrasil vs the rest

The closest tool is claude-mem โ€” also durable memory for coding agents, but a heavier, capture-everything system: it auto-records every session and AI-compresses it (needs Node + Bun + a vector DB). mem0 is a memory SDK for apps to remember their users. context-mode and Context7 own different layers (your live context window; fresh library docs). Yggdrasil is install-and-go, zero-dependency, local-first memory of your own work โ€” curated, not a firehose, stored as plain Markdown you can edit.

Yggdrasil claude-mem mem0 context-mode Context7
Durable memory of your own work (decisions, lessons, status) โœ… โœ… โœ… โš ๏ธ in-session โŒ
Drop-in for your agents, no code (install + MCP) โœ… โœ… โš ๏ธ SDK โœ… โœ…
Zero dependencies (stdlib + SQLite; no Node/Bun/vector DB) โœ… โŒ โŒ โŒ โ€”
Works with no LLM & no API key (lexical default) โœ… โŒ AI-compresses โŒ needs an LLM โœ… โŒ
Curated & editable as plain Markdown (not capture-everything) โœ… โŒ auto-captures all โš ๏ธ โŒ โ€”
100% local & private (no cloud by default) โœ… โš ๏ธ โš ๏ธ cloud default โœ… โ˜๏ธ hosted
Cross-project recall ("solved this in project B") โœ… โš ๏ธ โš ๏ธ โŒ โ€”
One memory shared across tools (Claude Code ยท Codex ยท any MCP host) โœ… โœ… โš ๏ธ per-app โœ… โœ…
Up-to-date public library docs โŒ (use Context7) โŒ โŒ โŒ โœ…

claude-mem vs Yggdrasil, in one line: claude-mem auto-captures everything and AI-compresses it (Node + Bun + a vector DB; ~84kโ˜…, ships a crypto token). Yggdrasil keeps the few things that matter โ€” curated, deduped, zero-dependency, stored as Markdown you own โ€” no AI required, no token. Different philosophy; you can run both.

mem0 vs Yggdrasil, in one line: mem0 is a memory SDK/platform for building apps that remember their users (you write code; it usually calls an LLM, cloud by default). Yggdrasil is drop-in, local-first memory of your own work for the agents you already code with. Different job โ€” pick by who you are.

Also pairs well with autoresearch โ€” an autonomous experiment loop (not a memory tool); Yggdrasil gives it long-term memory of what it already tried โ†’ integration.

TL;DR: want automatic capture-everything across many IDEs and don't mind a heavier stack โ†’ claude-mem. Building an AI product that must remember its users at scale โ†’ mem0. Want a tiny, local, curated memory you own โ€” zero deps, no AI required โ€” for the coding agents you already use โ†’ Yggdrasil.

๐Ÿงฐ Commands

Agents see six MCP tools: ygg_health, ygg_bootstrap, ygg_search, ygg_recall, ygg_remember, ygg_materialize. After ygg install they're auto-registered with Claude Code and Codex โ€” just open a project and work.

Full ygg CLI reference

Memory ops

Command What it does
ygg recall --query "โ€ฆ" Cross-project search โ€” "have I done this anywhere?"
ygg search --project P --query "โ€ฆ" Project-scoped search (--type, --tag, --limit, --json)
ygg remember --project P --type debugging_lesson --content "โ€ฆ" Save a durable memory (secret-guarded, deduped; --tag to label)
ygg bootstrap --project P Pull a project's memory before starting work
ygg pin --id ID ยท ygg unpin --id ID Pin a memory so it reliably surfaces
ygg supersede --id ID Archive an outdated memory a newer one replaces
ygg materialize --id ID --project P Export one memory to an Obsidian note

Service & setup

Command What it does
ygg install ยท ygg setup Guided setup โ†’ background service + MCP registration
ygg doctor ยท ygg update Diagnose the install ยท redeploy the latest code
ygg status ยท start ยท stop ยท restart ยท logs Manage the always-on daemon
ygg hooks ยท unhooks Enable/disable the SessionStart auto-bootstrap hook
ygg recommend Show the hardware-aware model catalog
ygg token ยท uninstall Print the auth token ยท remove service + registration

Give it a personality โ€” edit ~/.yggdrasil/identity.json:

{ "name": "Jarvis", "persona": "concise, proactive, dry wit", "user_facts": ["prefers TypeScript", "ships small PRs"] }

โ“ FAQ

Does it send my code or memory to the cloud?

No. The engine, the database, and the optional models all run locally. No account, no telemetry. Your memory never leaves your machine.

Does it automatically remember everything?

No โ€” by design. Retrieval is automatic; writing is deliberate (the agent calls ygg_remember for durable lessons). Auto-capturing everything pollutes memory, so we don't. A background model consolidates what's already saved (propose-only by default).

Do I need a GPU or an API key?

No. The default is pure lexical search โ€” zero dependencies, instant. Semantic search is opt-in and uses a local model via Ollama (no API key). The installer recommends a model that fits your hardware.

How heavy is it, and how many tokens does it cost?

Tiny. The engine is ~21 MB RAM, ~0% idle CPU, zero dependencies (Python stdlib); disk is tens of KB per memory. Session start injects ~300 tokens of memory and each tool call returns a small snippet โ€” all the heavy work (indexing, embeddings, consolidation) runs off-LLM on your machine.

How good is retrieval?

Measured by eval/ygg_eval.py (35 labelled cases, dev/holdout split), recall@1:

Mode recall@1 paraphrase crosslingual (ENโ†’RU)
lexical (default) 0.77 0.63 0.00
dense ยท all-minilm (45 MB, EN) 0.83 0.88 0.00
dense ยท paraphrase-multilingual (~560 MB) 0.94 0.88 0.80

keyword and identifier queries are 1.0 in every mode; with the multilingual model recall@3 = 1.0 (every target in the top 3).

Can I edit or delete memories by hand?

Yes. Memories materialize to Markdown notes in an Obsidian vault โ€” read, edit, or remove them like any file. The engine never hard-deletes; it archives (reversible).

Is it production-ready?

It's an honest alpha: the happy path and the full governance loop are covered by passing gates (scripts/run_gates.sh). Not yet hardened for multi-user/production.

๐Ÿ—บ๏ธ Roadmap

  • ๐Ÿ›ฐ๏ธ Cross-surface sync โ€” connect from ChatGPT / Claude on the web and mobile; one memory across CLI, browser, and phone.
  • ๐Ÿ”— Relation graph (SOLVES / SUPERSEDES / CONTRADICTS) for richer reasoning.
  • ๐Ÿง Linux/Windows service installers (implemented; final on-device testing).

๐Ÿค Contributing

Issues and PRs welcome. Run scripts/run_gates.sh and python3 -m unittest discover -s tests before submitting โ€” all gates must stay green.

๐Ÿ“œ License

Elastic License 2.0 โ€” see LICENSE. You may freely use, modify, self-host, and redistribute Yggdrasil. You may not sell it as a product or offer it to others as a hosted/managed service. It is source-available โ€” not OSI open source.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yggdrasil_memory-0.4.3.tar.gz (107.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

yggdrasil_memory-0.4.3-py3-none-any.whl (98.7 kB view details)

Uploaded Python 3

File details

Details for the file yggdrasil_memory-0.4.3.tar.gz.

File metadata

  • Download URL: yggdrasil_memory-0.4.3.tar.gz
  • Upload date:
  • Size: 107.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for yggdrasil_memory-0.4.3.tar.gz
Algorithm Hash digest
SHA256 46e57fc30ed63406029838bb3b19b30454fc4d6464d021d3ac6efe53a47b2c4a
MD5 dc0d4088d4f2bb0ce808010101bc78a1
BLAKE2b-256 a6697a1e46a732e66cf633a4f72ce7de416a3dadc3250a898e818b0f7a13a0e9

See more details on using hashes here.

File details

Details for the file yggdrasil_memory-0.4.3-py3-none-any.whl.

File metadata

  • Download URL: yggdrasil_memory-0.4.3-py3-none-any.whl
  • Upload date:
  • Size: 98.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for yggdrasil_memory-0.4.3-py3-none-any.whl
Algorithm Hash digest
SHA256 20bccbcb615d37b6c3edb5efdbe69ba0fc76cfce3649a55dcbf378c091c5fd70
MD5 bac691715be2bbf082ecbf98894c2215
BLAKE2b-256 c6e1931f1e26add95b7cf2543a9f77f745140537c7f0fdce38b3f894820d0e14

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page