MCP memory server with semantic search, graph, and bi-temporal tracking
Project description
🧠 Symbiosis Brain
Stop re-explaining your project to Claude. Make it remember. Build your symbiosis.
Persistent memory for Claude Code — a markdown brain that lives next to your code, with skills and hooks that make Claude actually use it. Local, file-based, Obsidian-compatible.
What changes
You stop saying "Hi Claude, my stack is X, last week we decided Y…" every session. Claude remembers your stack, your projects, your past decisions. Painful lessons resurface before you trip on them. Knowledge flows between repos. A smart hook saves the session before /compact swallows it.
368 notes, 431 entities, all wiki-linked — and this is just a few weeks of real work. This is what your head looks like when you're juggling five projects at once. Don't panic — Claude knows exactly where to look.
Install (30 seconds)
uv tool install symbiosis-brain
symbiosis-brain setup claude-code
That's it. Restart Claude Code — brain-welcome introduces itself, asks two friendly questions, and you're done.
Don't have uv? Or prefer installing straight from GitHub?
Install uv first (one-time, ~30 seconds — uv is a fast Python package manager):
# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
Install Symbiosis Brain straight from GitHub (no PyPI involved):
uv tool install git+https://github.com/Krill113/symbiosis-brain.git
symbiosis-brain setup claude-code
Same result — installs the latest main branch directly from the repo. Useful if you want to track unreleased changes or install from a fork.
🤖 Want Claude Code to install it for you? Paste this prompt:
Install Symbiosis Brain from https://github.com/Krill113/symbiosis-brain — use the default vault path, then remind me to restart Claude Code.
Claude will read this README, run the install with
--vault ~/symbiosis-brain-vault, and tell you when it's time to restart. You'll need to restart Claude Code manually — the running session can't pick up its own new MCP server until you do.
🤝 Augments Claude Code — never overrides it. Symbiosis Brain adds a memory layer. Every built-in Claude Code feature keeps working. Your existing hooks, skills, slash commands, and settings stay intact — we deep-merge our config with a
.bakbackup, andsymbiosis-brain uninstallrestores everything.
Why a markdown brain?
- 📂 Your knowledge, your files. Plain
.mdin a folder you pick. Human-readable, git-trackable, opens in Obsidian as a graph. - 🔍 Hybrid search, all local. Local embeddings + local index, no API key — memory calls don't add an API bill on top of Claude.
- 🔗 Wiki-links connect your projects.
brain_contextwalks the graph N hops — decisions in one repo surface as context in another. - ⏰ Bi-temporal. Every fact has a
valid_from/valid_todate. Stale knowledge gets a warning, not silent rot. - 🪶 Quiet by design. No Clippy, no nag. Hooks fire only when they earn the interruption (e.g., context at 70% → "save before /compact swallows this").
- 🧩 Skills shipped, not just storage.
brain-init,brain-recall,brain-save,brain-project-initmake Claude use the memory — not pray that it does. - 🤝 Layered, never invasive. Adds capability without disabling any of Claude Code's defaults. Uninstall is one command.
What it feels like
You: Continue from where we left off yesterday.
Claude: [brain-recall fires silently]
I see we paused on the auth migration after deciding to
skip JWT rotation — the blocker was the legacy refresh
token format. Pick up there?
Same vault, days apart, different process. No prompt engineering, no copy-pasting context. The skill brain-recall fired on its own because the request triggered it.
How it works (60 seconds)
A tiny MCP server backed by a folder of markdown notes. SQLite indexes them with FTS5 + vector search; wiki-links form a graph; companion skills wire the recall/save loop into Claude Code's own session lifecycle (SessionStart, Stop, PreCompact hooks).
You write nothing manually. The vault grows as you work.
Why this, not…
- Plain
CLAUDE.md/MEMORY.md— they grow into a 10K-line blob with no search and no decay. Symbiosis Brain decomposes into searchable, scoped, time-stamped notes. - basic-memory — closest in spirit (markdown + Obsidian). We add hybrid search (FTS5 + vector), skills/hooks that drive use, bi-temporal
valid_to, per-project + global scope. - mem0 / Letta — different category (cloud SaaS / agent SDK). We're local-first storage your existing Claude Code uses.
- mcp-memory-service — they ship REST/dashboard. We ship human-readable markdown + skills.
Maintenance
symbiosis-brain doctor # health check
symbiosis-brain setup claude-code --repair # fix only what's broken
symbiosis-brain uninstall # restore settings, vault preserved
uv tool upgrade symbiosis-brain # update
FAQ
Is my knowledge private? 100%. Everything is local files + a local SQLite index. No cloud, no telemetry, no API calls.
Will this break my Claude Code setup? No. Symbiosis Brain layers on top of Claude Code — it never disables built-in features, overrides your hooks, or removes your existing skills. Config is deep-merged with a .bak backup. uninstall restores everything.
Can I open the vault in Obsidian? Yes — that's a first-class use case. The welcome flow can install Obsidian for you and open your first note as a graph.
Does it work with other AI agents? Today: tuned for Claude Code. The MCP layer is portable; skill-driven UX is Claude-Code-specific but the storage works anywhere MCP works.
What about the name? Symbiosis — a mutually beneficial partnership. The tool lives next to Claude; Claude becomes more useful; your knowledge survives the next /compact. Build your symbiosis.
How do I delete everything? symbiosis-brain uninstall restores your settings.json from backup. The vault folder is preserved — delete it manually if you want a clean slate.
Release process (maintainer notes)
Releases are auto-published to PyPI on v* git tags via GitHub Actions (Trusted Publisher OIDC, no API tokens).
Workflow:
hatch version <patch|minor|major>— bumpssrc/symbiosis_brain/__init__.py- Move
[Unreleased]items inCHANGELOG.mdinto a new[X.Y.Z] — YYYY-MM-DDsection git commit -am "release: vX.Y.Z"git tag vX.Y.Z && git push --follow-tags- Watch Actions —
build,publish,verifyjobs must all pass - Verify on pypi.org/project/symbiosis-brain
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file symbiosis_brain-0.2.0.tar.gz.
File metadata
- Download URL: symbiosis_brain-0.2.0.tar.gz
- Upload date:
- Size: 332.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
68e252893afb79ea5a38d5c8b9d784d58479c6b7418f991766c9cbfc52dfa7a1
|
|
| MD5 |
f99df418f7dd99b969b58cade02147e3
|
|
| BLAKE2b-256 |
393bf5209fdd3acda05a2c68a58833641b8691671078d569e370aa7a259b11fc
|
Provenance
The following attestation bundles were made for symbiosis_brain-0.2.0.tar.gz:
Publisher:
publish.yml on Krill113/symbiosis-brain
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
symbiosis_brain-0.2.0.tar.gz -
Subject digest:
68e252893afb79ea5a38d5c8b9d784d58479c6b7418f991766c9cbfc52dfa7a1 - Sigstore transparency entry: 1547358821
- Sigstore integration time:
-
Permalink:
Krill113/symbiosis-brain@f1e112fdc08a3781298fc15640b32cd97a14941c -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/Krill113
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f1e112fdc08a3781298fc15640b32cd97a14941c -
Trigger Event:
push
-
Statement type:
File details
Details for the file symbiosis_brain-0.2.0-py3-none-any.whl.
File metadata
- Download URL: symbiosis_brain-0.2.0-py3-none-any.whl
- Upload date:
- Size: 67.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8e32dcd14b191f712ea05a7943a97251e1aee51cd9608cfe0432124a38d082a7
|
|
| MD5 |
2c891b0c8fb1a969c815f1847beb0ad5
|
|
| BLAKE2b-256 |
e5929a6eab9531c11de9a819fec8641730893bd82261ada7e84444d061d02280
|
Provenance
The following attestation bundles were made for symbiosis_brain-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on Krill113/symbiosis-brain
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
symbiosis_brain-0.2.0-py3-none-any.whl -
Subject digest:
8e32dcd14b191f712ea05a7943a97251e1aee51cd9608cfe0432124a38d082a7 - Sigstore transparency entry: 1547358964
- Sigstore integration time:
-
Permalink:
Krill113/symbiosis-brain@f1e112fdc08a3781298fc15640b32cd97a14941c -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/Krill113
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f1e112fdc08a3781298fc15640b32cd97a14941c -
Trigger Event:
push
-
Statement type: