zer0dex
Memory frameworkOfficial Hermes Labs project
Created by Hermes Labs
Published in hermes-labs-ai/zer0dex. Publisher page
64 GitHub stars
What it is
A local dual-layer memory pattern for AI agents: a compact, human-readable markdown index paired with semantic retrieval from a local vector store, queried before each message. For cross-project recall where flat memory files or vector-only RAG fall short. Local-first. Reference implementation.
AutoGineer overview, from the brain’s own files
zer0dex is a reference implementation for a local-first memory architecture designed to help AI agents manage long-term recall without overwhelming their context window. It utilizes a two-layer approach: a compact, human-editable Markdown index that provides a high-level map of stored information, and a local vector store that handles semantic retrieval of detailed memories. By providing a CLI and a loopback HTTP server, it allows developers to integrate persistent memory into their agents by querying the server before model requests. It is built for developers who need to manage growing archives of notes or project context locally, leveraging tools like Ollama, mem0, and Chroma.
How it works
Memory model: Vector store
AutoGineer overview, from the brain’s own files
The system operates through two distinct layers. The Markdown index acts as a human-readable map of projects and categories that can be kept in the agent's context. The local memory store, powered by a vector database, holds the full details of the memories. Users seed the system from markdown files, and the agent host interacts with a local HTTP server to query relevant information based on semantic meaning before generating responses.
| Folder | Role | Files |
|---|---|---|
| .github | agent-config | 7 |
| assets | attachments | 7 |
| docs | docs | 3 |
| src | source-code | 5 |
| tests | tests | 4 |
| .agents | folder | 1 |
| eval | folder | 3 |
Requirements
Runtimes: Python >=3.11
Databases: Chroma
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Google Antigravity, Kiro, OpenCode, Amp, Roo Code, Cline, JetBrains Junie, Devin (ex-Windsurf)
Set it up
- Not scanned by AutoGineerIts dependencies are installed by pip or uv when you run it and were not scanned by AutoGineer (3 declared). https://pypi.org/project/zer0dex/
Created by Hermes Labs. Published in hermes-labs-ai/zer0dex. Licence: Apache License 2.0.
Usage
AutoGineer overview, from the brain’s own files
- Integrate memory into local AI agents
- Manage long-term project recall
- Seed agent memory from existing markdown notes
- Perform semantic search over local memory stores
- “Where does Project Atlas deploy?”
- The agent queries the zer0dex server and retrieves the specific deployment target stored in the vector database.
- “List all active project categories.”
- The agent reads the human-editable Markdown index to provide a summary of current project categories.
Documentation by Hermes Labs
<div align="center">
<picture> <source media="(prefers-color-scheme: dark)" srcset="assets/zer0dex-hero-white-background.jpg"> <source media="(prefers-color-scheme: light)" srcset="assets/zer0dex-hero-black-background.jpg"> <img src="assets/zer0dex-hero-black-background.jpg" alt="zer0dex by Hermes Labs" width="100%"> </picture>
zer0dex
Give an agent long-term recall without loading every note into its prompt.
A readable Markdown index shows what the agent knows. A local vector store retrieves the details when they matter.
by Hermes Labs
PyPI · CLI reference · HTTP API
</div>
Your agent knows the project name, but the deployment decision it needs is buried in months of notes. Putting the entire archive in its context is expensive and hard to navigate; a vector store alone gives you no simple map of what's in it. zer0dex pairs a short index you can read and edit with semantic search over the underlying memories.
Try it locally
Requires Python 3.11 or 3.12 and Ollama running on your machine. Start Ollama first if it is not already serving at http://localhost:11434.
mkdir zer0dex-demo && cd zer0dex-demo
python3 -m venv .venv
source .venv/bin/activate
python -m pip install zer0dex
ollama pull nomic-embed-text
ollama pull mistral:7b
printf '# Memory\n## Project Atlas\n- Deployment target: staging\n' > MEMORY.md
zer0dex check
zer0dex init
zer0dex seed --source MEMORY.md
zer0dex serve --background
zer0dex query "Where does Project Atlas deploy?"The last command returns matching stored memories if extraction and retrieval succeeded. Run zer0dex stop when finished. The configuration and store live in the current directory (.zer0dex.json and .zer0dex/); use a disposable directory for a trial. If check fails, confirm that Ollama is running and both models were pulled before seeding.
How the two layers work
| Layer | What it gives you |
|---|---|
| Markdown index | A compact, human-editable map of projects, categories, and durable pointers. Keep this in the agent's context. |
| Local memory store | The fuller details, retrieved by meaning when the agent needs them. |
The CLI can seed memories from Markdown, add more text, and query a loopback HTTP server. Your agent host calls POST /query before a model request and decides which matches to include. zer0dex supplies the server and CLI; it does not install an automatic hook into your agent. A small TypeScript host adapter shows that integration point.
The default path uses local Ollama models for embeddings and memory extraction, with mem0 and Chroma for storage. You can inspect the index directly and keep the retrieval store on your machine.
When to use it
zer0dex is a fit for developers building a local, long-running agent whose notes have outgrown one MEMORY.md, but who still want a readable map of what was saved. It is a reference implementation of this two-layer pattern, currently in the 0.1.x developer-preview line. The package is not a hosted team service or a complete agent framework.
In the bundled 86-memory, 97-case evaluation, the combined approach reached 91.2% average recall and 80.0% cross-reference recall. This is one test workload; try your own notes and queries before choosing a retrieval strategy.
Go further
Apache-2.0. Hermes Labs builds agentic infrastructure for autonomous systems.
docs/cli.md
CLI contract (developer preview)
zer0dex stores memories locally by default, and its server listens on
127.0.0.1 only.
Run commands from the directory that should own the store. zer0dex init
creates .zer0dex.json and, by default, the .zer0dex/ Chroma directory in
that current directory. The configured chroma_path is interpreted by Chroma;
keep it relative to the same project directory or use an explicit absolute path
when moving a store.
Prerequisites
Use Python 3.11 or 3.12 for the CI-tested developer-preview path. Install the package, then ensure the local Ollama service and both default models exist:
pip install -e ".[dev]"
ollama serve
ollama pull nomic-embed-text
ollama pull mistral:7b
zer0dex checkcheck tests the service, configured models, mem0ai, chromadb, and the
Python ollama client. It exits 0 only when all checks pass; it exits 1 with
one or more explicit failed or skipped lines otherwise. It does not modify a
store.
Commands
zer0dex --version
zer0dex init [--collection NAME] [--chroma-path PATH] [--port PORT] [--user-id ID]
zer0dex seed --source FILE_OR_DIRECTORY [--source MORE] [--dry-run]
zer0dex serve [--port PORT] [--background]
zer0dex stop
zer0dex status [--port PORT]
zer0dex query TEXT [--limit N] [--port PORT]
zer0dex add TEXT [--port PORT]--versionprints the installed package version (sourced from package metadata) and exits 0. It performs no server, store, or network access.initwrites configuration and creates its storage directory. It exits 0 on success. It intentionally does not start Ollama; runcheckbefore the first real seed or server start.seedrecursively reads only*.mdfiles from source directories and adds extracted memories under the configured user ID.--dry-runlists chunks and exits 0 without requiringmem0ai, the Python Ollama client, or a running Ollama service. A missing source or first-use prerequisite exits 1.serveloads the configured store and starts the loopback HTTP server. Foreground mode returns its server exit code.--backgroundwaits up to 30 seconds for/health; it prints success only after that check passes, and exits 1 (terminating and reaping the child) when readiness is not reached. A background start writesserver.jsonin the configured storage directory with a per-launch identity token, and reports success only after the new server proves both its token and PID.stopstops the background server recorded by this project. Before sendingSIGTERM, it asks the loopback server on the recorded port to prove the per-launch token and PID. Missing or dead state is removed safely; an unverifiable, mismatched, or reused PID is never signaled and causes exit 1 with state preserved for inspection. Repeatingstopafter a successful stop is a successful no-op.status,query, andaddrequire a running local server. They exit 1 when it cannot be reached.queryexits 0 withNo relevant memories found.when the server returns an empty result set.addexits 1 when the server reports that extraction stored zero memories, and prints guidance to check, query, or rephrase the text.query --limitrequires a positive integer; invalid values are rejected by the CLI before any request.
The defaults are collection zer0dex, user ID agent, port 18420, storage
.zer0dex, Ollama URL http://localhost:11434, embedding model
nomic-embed-text, and extraction model mistral:7b. Change configuration
deliberately after init; command-line options presently cover collection,
storage, port, and user ID as shown above.
Disposable workflow
mkdir demo-memory && cd demo-memory
printf '# Notes\n\n## Preference\nUse concise factual replies.\n' > notes.md
zer0dex check
zer0dex init --port 18429
zer0dex seed --source notes.md
zer0dex serve --port 18429 --background
zer0dex status --port 18429
zer0dex query 'What reply style is preferred?' --port 18429
zer0dex add 'The demo service is local-only.' --port 18429
zer0dex stopThis is a local implementation pattern, not a guarantee of complete recall or correct retrieval for another workload. See HTTP contract and compatibility.
45 files · 33 not served here
- .agents/skills/zer0dex/SKILL.md (not served here)
- .github/FUNDING.yml (not served here)
- .github/ISSUE_TEMPLATE/bug_report.yml (not served here)
- .github/ISSUE_TEMPLATE/feature_request.yml (not served here)
- .github/dependabot.yml (not served here)
- .github/pull_request_template.md (not served here)
- .github/workflows/ci.yml (not served here)
- .github/workflows/publish.yml (not served here)
- .gitignore (not served here)
- .pre-commit-config.yaml (not served here)
- AGENTS.md
- ATTRIBUTION.md
- AUTOGINEER-RUNS.md
- CHANGELOG.md
- CITATION.cff (not served here)
- CODE_OF_CONDUCT.md
- CONTRIBUTING.md
- LICENSE
- README.md
- SECURITY.md
- assets/preview-source.txt (not served here)
- assets/preview-spec.md (not served here)
- assets/preview.png (not served here)
- assets/zer0dex-hero-black-background.jpg (not served here)
- assets/zer0dex-hero-dark.svg (not served here)
- assets/zer0dex-hero-light.svg (not served here)
- assets/zer0dex-hero-white-background.jpg (not served here)
- codemeta.json (not served here)
- docs/cli.md
- docs/compatibility.md
- docs/http.md
- eval/README.md (not served here)
- eval/evaluate.py (not served here)
- eval/evaluate_small.py (not served here)
- llms.txt (not served here)
- pyproject.toml (not served here)
- src/zer0dex/__init__.py (not served here)
- src/zer0dex/cli.py (not served here)
- src/zer0dex/hook_example.ts (not served here)
- src/zer0dex/seed.py (not served here)
- src/zer0dex/server.py (not served here)
- tests/test_cli.py (not served here)
- tests/test_docs_consistency.py (not served here)
- tests/test_seed.py (not served here)
- tests/test_server.py (not served here)
Advantages
- Provides a human-readable index that is easy to edit and maintain alongside the automated vector store. evidence: README.md
- Reduces context window usage by separating high-level indexing from detailed semantic retrieval. evidence: README.md
Limitations
- Does not provide an automatic hook into agent hosts; requires manual integration via the provided API. evidence: README.md
- Not suitable for compliance or governance-heavy environments as it is a local-first developer tool. evidence: AGENTS.md
Security
Risk level: Medium risk
This brain runs
Git hooks (2)
.pre-commit-config.yaml:pre-commit hooks from https://github.com/pre-commit/pre-commit-hooks at v4.6.0 (contributor tooling: runs only after pre-commit install)· uses the network.pre-commit-config.yaml:pre-commit hooks from https://github.com/astral-sh/ruff-pre-commit at v0.4.4 (contributor tooling: runs only after pre-commit install)· uses the network
Agent instructions that run or fetch something (2)
AGENTS.md:pip install -e ".[dev]"AGENTS.md:python -m pytest tests/ -q
- Medium risk: runs-git-hook-remote-exec (.pre-commit-config.yaml:2)
- Medium risk: runs-git-hook-remote-exec (.pre-commit-config.yaml:9)
- Low risk: network-instructions (.agents/skills/zer0dex/SKILL.md:5)
- Low risk: network-instructions (AGENTS.md:20)
Attribution and licence
- Created by
- Hermes Labs
- Declared authors
- Rolando Bosch (declared in pyproject.toml)
- Rolando Bosch Rodriguez (declared in CITATION.cff)
- Publisher
- Hermes Labs (Official Hermes Labs project)
- Source
- hermes-labs-ai/zer0dex · commit aae06c9
- Licence
- Apache License 2.0 (files served here)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Hermes Labs.
Install from source
33 of its files are not served here, so there is no ZIP. hermes-labs-ai/zer0dex at aae06c9