EverOS — local-first markdown memory framework for AI agents and user chats; lightweight, dev-friendly, small-team
Project description
EverOS
Local-first markdown memory framework for AI agents and user chats — lightweight, dev-friendly, small-team.
What is EverOS
EverOS is an open-source Python framework that turns conversations, agent trajectories, and files into structured, retrievable, evolving long-term memory for AI agents and user chats. Designed for lightweight local deployments (small teams, individual developers), with three core principles:
- Markdown as Source of Truth — All memory persists as plain
.mdfiles. Open, edit, grep, version with Git, view in Obsidian. No black-box database lock-in. - Lightweight three-piece storage —
Markdownfiles (truth) +SQLite(state/queue) +LanceDB(vector + BM25 + scalar). No MongoDB / Elasticsearch / Milvus / Redis / Kafka required. - EverAlgo as pure algorithm library — Memory extraction algorithms are decoupled into a separate library; this project orchestrates and persists.
Architecture at a glance
┌───────────────────────────────────────────────┐
│ entrypoints/ (CLI + HTTP API) │ presentation
├───────────────────────────────────────────────┤
│ service/ (use cases: memorize/retrieve) │ application
├───────────────────────────────────────────────┤
│ memory/ (extract + search + cascade) │ domain
├───────────────────────────────────────────────┤
│ infra/ (markdown / sqlite / lancedb) │ infrastructure
└───────────────────────────────────────────────┘
↑ ↑
component/ core/
(LLM/Embedding) (observability/lifespan)
DDD 5 layers, single-direction dependency. See docs/architecture.md.
Quick start
Install as a package
uv pip install everos # or: pip install everos
# Generate starter config (model defaults bundled inside the wheel)
everos init # writes ~/.everos/everos.toml + ome.toml (use --root to relocate)
# Edit ~/.everos/everos.toml and fill the api_key fields (see comments inside).
everos --help
everos server start
everos init writes two TOML files into the memory root (~/.everos by
default; relocate with --root): everos.toml (app settings + provider
credentials) and ome.toml (offline-engine schedules). everos server start
reads <root>/everos.toml and exits with an error if it is missing. Any
setting can also be overridden by an EVEROS_* environment variable
(e.g. EVEROS_LLM__API_KEY). The endpoint stack is OpenAI-protocol
compatible (OpenAI / OpenRouter / vLLM / Ollama / DeepInfra …) — set the
base_url field in each provider section of everos.toml to point at any
of them.
Multi-modal (optional)
To ingest non-text content (image / pdf / audio / office documents)
through /api/v1/memory/add content items, install the optional
extra:
uv pip install 'everos[multimodal]' # or: pip install 'everos[multimodal]'
This pulls in everalgo-parser (with the [svg] bundle for SVG
support via cairosvg) and wires up the multimodal LLM client
(the [multimodal] section in everos.toml, defaults to
google/gemini-3-flash-preview).
Office document support requires LibreOffice as a system dependency.
The parser shells out to soffice (LibreOffice's headless renderer) to
convert .doc / .docx / .ppt / .pptx / .xls / .xlsx to PDF
before feeding the result into the multimodal LLM. Without LibreOffice,
office uploads return HTTP 503 (CAPABILITY_UNAVAILABLE) with a clear
error message; PDF / image
/ audio / HTML / email parsing is unaffected.
Install on the host before serving office documents:
brew install --cask libreoffice # macOS
sudo apt-get install -y libreoffice # Debian / Ubuntu
For the full multimodal contract (supported modalities, uri vs
base64, config, error semantics, end-to-end curl examples), see
docs/multimodal.md.
For a step-by-step walkthrough (add a conversation → flush → search → read the markdown), see QUICKSTART.md.
Develop locally
git clone <repo>
cd everos
uv sync # creates ./.venv and installs deps
source .venv/bin/activate # — or skip activation and prefix every command with `uv run`
everos init # fill in the [llm] api_key in the generated everos.toml
everos --help
make test
Storage layout
~/.everos/
├── default_app/ # app_id ("default" → "default_app" on disk)
│ └── default_project/ # project_id ("default" → "default_project")
│ ├── users/<user_id>/
│ │ ├── user.md # profile
│ │ ├── episodes/ # daily-log episodes (visible)
│ │ ├── .atomic_facts/ # nested facts (dotfile-hidden)
│ │ └── .foresights/ # predictive memory (dotfile-hidden)
│ └── agents/<agent_id>/
│ ├── agent.md
│ ├── .cases/ # one task case per entry
│ └── skills/ # named procedural memories
├── .index/ # derived indexes (rebuildable from md)
│ ├── sqlite/system.db # state + queue + audit
│ └── lancedb/*.lance/ # vector + BM25 + scalar
└── .tmp/ # transient working files
Open any <app>/<project>/users/<user_id>/ folder in Obsidian — your
agent's brain is just files. The dotfile directories (.atomic_facts/,
.foresights/, .cases/) stay hidden by default so the visible folder
is the user-facing memory surface, while extracted derivatives sit
quietly alongside.
Features
- Hybrid retrieval: BM25 + vector (HNSW/IVF-PQ) + scalar filter, single-query in LanceDB
- Cascade index sync: edit a
.md→ file watcher → entry-level diff → LanceDB sync, sub-second - Multi-source extraction: conversations / agent trajectories / file knowledge
- Dual-track memory: user-track (Episodes / Profiles) + agent-track (Cases / Skills)
- Async-first: full asyncio, single event loop
- Multi-modal: text + small image / audio inline; large media via S3/OSS reference
Project structure
everos/ # repo root
├── src/everos/ # main package (src layout)
│ ├── entrypoints/ # cli + api
│ ├── service/ # use case orchestration
│ ├── memory/ # domain: extract + search + cascade + prompt_slots
│ ├── infra/ # storage: markdown + lancedb + sqlite
│ ├── component/ # cross-cutting: llm / embedding / config / utils
│ ├── core/ # runtime: observability / lifespan / context
│ └── config/ # configuration data + Settings schema
├── tests/ # unit / integration / golden / fixtures
├── docs/ # design docs
└── .claude/ # team-shared rules + skills (auto-loaded by Claude Code)
Documentation
- docs/overview.md — Project overview & vision
- docs/architecture.md — DDD layered architecture & dependency rules
- docs/engineering.md — Engineering & dev-efficiency infrastructure (CI / tooling / Claude Code)
- docs/multimodal.md — Multimodal memory: ingest image / pdf / audio / office docs via the HTTP API
- CHANGELOG.md — Release notes
- CONTRIBUTING.md — How to contribute
- .claude/rules/ — Detailed coding conventions (auto-loaded by Claude Code)
Status
Stable (v1.1.0) — Released on PyPI; the v1 API is stable.
License
Apache License 2.0 — see NOTICE for third-party attributions.
Citation
If you use EverOS in research, see CITATION.md.
Acknowledgments: This project builds on prior research and tooling — see ACKNOWLEDGMENTS.md.
Project details
Release history Release notifications | RSS feed
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 everos-1.1.2.tar.gz.
File metadata
- Download URL: everos-1.1.2.tar.gz
- Upload date:
- Size: 1.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4c1a41158e45d4017dfb807756f372c537180ce167c76c06a0251d1c5da1fb8c
|
|
| MD5 |
6f0ef7dafa6a586509c4f08c47f8fa18
|
|
| BLAKE2b-256 |
8c61e6e250d1bd5b64cffdbe8cb1b849573b2d450472466c830fe42b1613655b
|
File details
Details for the file everos-1.1.2-py3-none-any.whl.
File metadata
- Download URL: everos-1.1.2-py3-none-any.whl
- Upload date:
- Size: 468.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
babeddc5b77ee832d710fda7f41efd2b6dac5cb674dd53021700ec199e89dda3
|
|
| MD5 |
650f5bf380b26dcd235bebc97983c79c
|
|
| BLAKE2b-256 |
8afd6cac7f188e55a118f41bad7b7e248e08b38be44ea0e274959f00cd0bc490
|