Mnemosyne is now an OpenSource Collective on OpenCollective.Support us
Mnemosyne
All posts
Community2026-08-015 min read

Mnemosyne Has a Second Maintainer: Denis Hache

For most of its life this project had exactly one person with the keys. As of August 1st it has two. Denis Hache (@dplush) is now co-maintainer, with write access, review authority, and the standing to drive work without waiting on me.

governancemaintainerscommunityopen-source

Mnemosyne has had exactly one person with commit rights since the first line of it existed. That was fine when it was a late-night side project. It stopped being fine somewhere around the point where people started running it in production and filing issues faster than one person could read them.

As of August 1st, 2026, that changed. Denis Hache (@dplush) is now co-maintainer of Mnemosyne.

How he earned it

This is not a title handed out to be nice. Denis's first patch landed on June 1st, 2026 — a fix to multilingual recall, where tokenization was mangling non-ASCII Latin characters and quietly degrading retrieval for anyone not working in English. It was a small diff with a real bug underneath it, which turned out to be the pattern.

Two months later he has over a hundred commits in the tree. A partial list of what he's responsible for:

  • Cache coherence. Enhanced Recall was serving invalidated and stale rows until its TTL expired. Denis fixed both halves — invalidation and fresh writes — so a writer evicts what another instance had warmed.
  • Runtime configuration that actually honors config.yaml. Recall weights and degradation batch sizes were resolved once and then frozen. They now resolve as config.yaml > env > defaults on every pass, so a reload means something.
  • Failure that is loud instead of silent. Vector rebuilds that half-completed used to report success. Invalidations that hit an out-of-scope row used to report success. MCP invalidate now returns memory_not_found, and a failed repair exits non-zero.
  • Hermes integration, end to end. Wrapper Python-runtime compatibility guards, root-only plugin installs, session rebinding on /new and /resume, manifest versions that match the released package, and the 0.6.0 release prep itself.
  • Windows. Someone has to care about Git Bash path semantics, and it turns out that someone is Denis. mnemosyne backup /c/... now writes where you meant instead of silently landing on a drive-relative path.
  • A private vulnerability disclosure. He found it, he reported it through the right channel instead of the issue tracker, and he waited for the fix. That is a judgment call, not a code contribution, and it counted for a lot.

The part that actually decided this, though, is his reviews. Go read the discussion on the embedding-dimension work in #518 and #521. Denis spec'd the contract, caught that a zero or negative MNEMOSYNE_EMBEDDING_DIM parsed fine but was meaningless, insisted the tests spawn a fresh interpreter to prove import-time behavior rather than asserting on a warm process, and pushed back on a changelog entry that overstated what the fix did. That is the work of someone who already had the responsibility. The commit bit just made it official.

What he can actually do

I want to be specific about this rather than vague, because "co-maintainer" means different things in different projects. The full split lives in MAINTAINERS.md , but the short version:

  • Denis has write access. He merges PRs and pushes branches. He does not need me for that.
  • He can drive features, integrations, documentation, testing, and tooling independently. Not "propose" — drive.
  • Docs, tests, and CI are either maintainer's call.
  • Breaking changes to public APIs require consensus — both of us, or it doesn't ship.
  • Core architecture (the BEAM tiers, banks, profiles, the recall pipeline) still has my final say, and PyPI publishing, repo settings, and org admin stay with me. Not out of distrust — those are the levers where a mistake is loud and irreversible, and it should be obvious who owns them.
  • He gets co-authorship credit on releases and publications, because he earned it.

Why this matters more than it sounds

A single-maintainer project is one bad month away from being an archived repository. I know this personally: the last few months of my life were hard in ways that had nothing to do with code, and the project kept shipping partly because someone else had their hands on it. That is not a hypothetical argument for shared ownership. That is a thing that actually happened here.

If you run Mnemosyne on anything you care about, this is the single most important change to the project this year. Not a feature. A second set of hands, with the keys, who reviews harder than I do.

Denis — thank you. Genuinely. Welcome aboard.

Governance lives in MAINTAINERS.md and is amended only by written agreement of both maintainers. Contributions still require a signed CLA, the license is still MIT, and the core engine is still free forever.

A

Abdias J

Building Mnemosyne in public. No VC, no cloud lock-in, just code that works.