everos server is always in front of your agent.
Prerequisites
- Python 3.12+
- An OpenRouter API key — covers the chat LLM (memory extraction) and the multimodal LLM (parsing image / pdf / audio content items) with a single key.
- A DeepInfra API key — for the embedding and rerank models that OpenRouter doesn’t ship.
*__BASE_URL env var if you’d rather use OpenAI directly, self-host vLLM, route to Ollama, etc.
Steps
Configure
Generate the starter config files and drop in your two keys:
The template ships model defaults for
everos init generates two files in the memory root (~/.everos by default): everos.toml (provider and application settings) and ome.toml (offline strategy config, hot-reloaded). Open everos.toml and fill the api_key field in each provider section; only two distinct keys are needed:| Section | api_key provider |
|---|---|
[llm] | OpenRouter (chat LLM) |
[multimodal] | OpenRouter (same key works) |
[embedding] | DeepInfra |
[rerank] | DeepInfra (same key works) |
[llm] (gpt-4.1-mini) and [multimodal] (google/gemini-3-flash-preview). [embedding] and [rerank] ship no model default, so set their model and base_url yourself (for example DeepInfra’s Qwen/Qwen3-Embedding-4B and Qwen/Qwen3-Reranker-4B). To use a different OpenAI-compatible endpoint for any provider, set that section’s base_url.everos init and everos server start must use the same root: relocate with everos init --root <path> and start with the matching --root <path> (or set EVEROS_ROOT). The server 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), handy for containers and CI. Edits to everos.toml need a server restart; ome.toml hot-reloads within ~2s.Start the server
The default bind is
127.0.0.1 (loopback only). To expose the API elsewhere, put your own auth/gateway in front first. The cascade index daemon runs in the same process as a FastAPI lifespan coroutine — you don’t need a separate worker.Ctrl+C to stop the server when you’re done.In the second terminal, verify the server is up:Add a conversation
EverOS ingests memory at the conversation level: you POST a batch of Response:
messages tied to a session_id, and the server accumulates them until the boundary detector trips.status: "accumulated" means the messages are in the session buffer, but the boundary detector hasn’t decided to extract a memory cell yet.Force boundary extraction
For a quick demo, force extraction manually:Response (this takes a few seconds — one LLM call for extraction):
status: "extracted" means at least one memory cell was carved out and written to disk and indexed./flush is OSS-only. The cloud edition decides boundary timing server-side and does not expose this endpoint.Search your memory
profiles / agent_cases / agent_skills) are always present for client-side symmetry and are populated only when the relevant memory type matches.Your memory is just Markdown
This is what makes EverOS different — your memory persists as plain Markdown files on disk:default scope ID materialises as default_app / default_project on disk so the default space is visually distinct from any user-named space. Any other ID maps to itself (e.g. app_id: "my-app" → my-app/).
Top-level .index/ holds SQLite + LanceDB derived indexes — wipe it and the cascade daemon rebuilds everything from the Markdown alone.
Every memory entry is a plain file you can cat / grep / vim directly, version with Git, or open in Obsidian (the dotfile directories stay hidden by default).
Stopping the server
Ctrl+C in the server terminal. Uvicorn shuts each lifespan provider down in reverse order before exiting.
Next steps
Integrate into your agent
Add
/add, /flush, and /search to your agent loop. Any HTTP client works.Scope your memory
Use
app_id and project_id to isolate memory for different apps or projects.Multi-modal messages
Pass images, audio, PDFs, and documents alongside text. Install the multimodal extra to enable parsing.
Search modes
Choose from keyword, vector, hybrid, or agentic retrieval. Filter by user, session, or custom fields.

