Docs
Connect your first AI in a few minutes.
A CLI, an HTTP API, and an MCP server all read the same memory. Start with whichever fits the assistant in front of you.
Create your memory
Sign up and you get a private, per-user memory store immediately — nothing to install for the hosted beta. Create your memory →
Connect an assistant over MCP
Point any MCP-speaking client — Claude, an agent you run yourself, anything that talks the protocol — at the Mimesis MCP server. It runs over stdio and exposes mimesis_context, mimesis_remember, mimesis_propose_memory, candidate approve/reject, and explain.
Know which memory you're connecting to. There are two MCP paths and they are different things:
- Hosted account — run the bridge, mimesis-bridge: a stdio MCP server whose tools call your mimesis.ai account over HTTPS with an agent token. Tools: context, propose, search, list candidates, explain — approval stays in the web app.
- Local memory — run mimesis.mcp_server against a clone: reads/writes a private store on that machine only. It does not see your hosted account.
# HOSTED bridge — clone once, token via environment (never argv): $ git clone https://github.com/RevBooyah/mimesis-ai.git ~/mimesis-ai $ export MIMESIS_TOKEN=mt_… # from: account → Agents → Connect an agent // mcp client config { "mcpServers": { "mimesis": { "command": "python3", "args": ["-m", "mimesis.mcp_bridge"], "env": { "PYTHONPATH": "/home/you/mimesis-ai/src" } } } }
The bridge reads MIMESIS_TOKEN (and optional MIMESIS_HOST) from its environment. Prefer exporting it in the environment that launches your MCP client; only put it in the client config's env block if your client offers nothing safer.
# one-time, on the machine the assistant runs on: $ git clone https://github.com/RevBooyah/mimesis-ai.git ~/mimesis-ai // mcp client config, e.g. claude_desktop_config.json { "mcpServers": { "mimesis": { "command": "python3", "args": ["-m", "mimesis.mcp_server", "--user", "you", "--agent", "claude"], "env": { "PYTHONPATH": "/home/you/mimesis-ai/src" } } } }
PYTHONPATH must be the absolute path to the clone's src/ — a relative src only works if the client happens to launch from the repo root.
Works with
Your memory shows up wherever your agents run.
Mimesis speaks the Model Context Protocol (MCP) and a plain HTTP API, so it plugs into any MCP-capable assistant, editor, or multi-agent system. One memory, the same across all of them.
Multi-agent systems & agent OSs
Hermes also has native importers for its sessions and memory (see below).
Assistants & editors
Or anything that speaks MCP
If your tool can call an MCP server, it can read from your memory — including agent frameworks like LangGraph, CrewAI, and the Microsoft Agent Framework that call it as a tool.
The list isn't fixed: if a host lets its agents call MCP tools, Mimesis works there, and it grows as MCP support spreads. Mimesis holds the memory; you point the tool at it.
Talk to it over HTTP
Every request carries the bearer token you got back from signup or login. POST /api/context compiles a prompt-aware briefing, sized to the token budget you set. The /api prefix is the hosted-beta path; running your own server, drop it and call /context directly.
$ curl -X POST "$MIMESIS_HOST/api/context" \ -H "Authorization: Bearer $MIMESIS_TOKEN" \ -H "Content-Type: application/json" \ -d '{"prompt": "prep me for the supply-chain review", "max_context_tokens": 1200}'
Review what it learns
Anything an assistant infers about you arrives as a candidate, not a fact. Keep it, edit it, or discard it in the app — or pull the queue directly and approve or reject by id.
$ curl "$MIMESIS_HOST/api/candidates" -H "Authorization: Bearer $MIMESIS_TOKEN"
Connecting as an agent (read this if you are one)
Everything an AI agent needs to connect a human's hosted mimesis.ai account, or to walk them through it. Machine-readable copy of this reference: /llms.txt.
1 · Get a token
The easy way (tell your human this): log in at mimesis.ai → My account → Agents tab → Connect an agent → name the agent → Create token. The token is shown once with a copy button — paste it into the agent's config. Agent tokens last 90 days and can be revoked from the same card.
The programmatic way: accounts belong to humans — if yours doesn't have one, walk them through signup rather than inventing credentials. Signup/login return a session token directly, and an authenticated call to POST /api/auth/token {"agent":"hermes"} mints a dedicated 90-day agent token (recommended over reusing the login session — revoking one doesn't kill the other).
# new account (password ≥ 12 chars; email required for recovery) $ curl -X POST https://mimesis.ai/api/auth/signup \ -H "Content-Type: application/json" \ -d '{"user":"stevec","email":"steve@example.com","password":"a long passphrase"}' # existing account ("user" or "email" + password) $ curl -X POST https://mimesis.ai/api/auth/login \ -d '{"user":"stevec","password":"a long passphrase"}' # both return: {"user":"stevec", "email":"…", "agent":"…", "token":"mt_…"}
Treat the token like a password: send it only as a header, never store it in a memory (obvious credentials are refused at the door anyway). Rate limits: signups and failed logins are capped per address — a 429 means wait, not retry.
2 · Call the API
Every request: Authorization: Bearer <token>. The token decides whose memory you touch — any user field in a request is ignored, so you cannot cross tenants.
| POST /api/context | the main read: {"prompt":"…","max_context_tokens":1200,"budget_mode":"adaptive"} → a compiled briefing sized to your window |
| POST /api/propose-memory | {"text":"…","rationale":"why it matters"} → lands as a candidate for the human to keep or discard. This is how agents write. |
| POST /api/remember | {"text":"…"} → durable memory immediately. Only for words the human explicitly dictated — inferred facts go through propose-memory |
| GET /api/candidates | the review queue; approve/reject with POST /api/candidates/<id>/approve|reject (only when the human says so) |
| POST /api/memories/search | {"query":"…","limit":20} → direct search when you need a specific fact, not a briefing |
| GET /api/profile | the owner's always-relevant identity/preference facts |
| POST /api/agents/<name>/persona | {"content":"…SOUL.md…"} → a candidate persona version. Agents may only propose for their own name; the response's version_id is what gets approved. See personas |
| POST /api/agents/<name>/persona/approve | {"version_id":N} → makes that version live (owner-only). GET /api/agents/<name> lists current persona + all versions with their review status |
| POST /api/auth/token | {"agent":"name"} → a dedicated 90-day agent token (shown once), enrolled with candidate-only permissions: context + search + propose, no approve/delete. GET /api/auth/tokens lists active tokens, POST /api/auth/tokens/<id>/revoke kills one |
| GET /api/auth/whoami | who your token authenticates as: user, agent, and the exact permissions you hold (never the token). Call this first if requests are failing with 403 |
| GET /api/account/export | everything, as data the human owns; POST /api/auth/logout revokes the calling token |
Errors are consistent: 401 missing/expired token → re-login; 403 your permission profile can't do that; 402 paid-tier feature; 429 rate cap. Bodies carry {"error":"…"}.
3 · Behave like a guest
Mimesis is the human's memory, not yours. Propose, don't assert: inferred facts go in as candidates with a rationale, and the human decides what's true. Ask for a briefing per task instead of bulk-reading; the compiler exists so you don't have to.
4 · Personas: give each agent its SOUL.md
A persona is an agent's standing character — its voice, role, and boundaries — usually written as a SOUL.md. Mimesis stores it scoped to that one agent (the raw file preserved by SHA-256, a compact summary served with its context) and keeps every version. Three ways to set one; approval is always the owner's, in the app's Agents tab:
- Web: My account → Agents → Add persona → paste or upload the SOUL.md → Approve when the summary looks right.
- Agent-driven: if you already carry a SOUL.md, send it yourself — call the mimesis_propose_persona MCP tool (hosted bridge), or POST /api/agents/<your-name>/persona with {"content":"…"}. You can only propose for the agent name your token authenticates as; it lands as a candidate version the human approves.
- CLI (local installs): agents register <name> first (once), then agents import-soul <name> --file SOUL.md, then agents approve-persona <name> <version-id>.
# agent pushes its own SOUL.md (candidate until the human approves) $ curl -X POST -H "Authorization: Bearer $TOKEN" \ -d '{"content":"# SOUL\n\nBarney is a terse ops assistant…"}' \ "https://mimesis.ai/api/agents/barney/persona" # the propose response returns the version_id; GET /api/agents/barney # lists all versions if you need to look one up later # owner approves a pending version (web app does this for you) $ curl -X POST -H "Authorization: Bearer $OWNER_TOKEN" \ -d '{"version_id":<from the propose response>}' \ "https://mimesis.ai/api/agents/barney/persona/approve"
Bring your existing notes
Import an Obsidian vault, a Honcho chat export, or recent Hermes sessions from the CLI. Imported items — like anything an agent infers — land as candidates for you to review, never as active memory on their own.
In the app's Imports tab, every upload has an Applies to selector: keep it in your shared memory (default), or scope it to an existing teammate — or a new one, created on the spot as propose-only. Scoped imports (say, a Hermes agent's own MEMORY.md) are visible only to that teammate and you.
$ PYTHONPATH=src python3 -m mimesis.cli --user you \ import-obsidian --vault "~/Documents/Obsidian Vault" $ PYTHONPATH=src python3 -m mimesis.cli --user you \ import-honcho-json export.json $ PYTHONPATH=src python3 -m mimesis.cli --user you \ import-hermes-sessions --since-last-run
TELOS: deep context in one file
Mimesis builds and maintains a TELOS file — the open danielmiessler/telos format for who you are and what you're working toward. Entries live as normal memories tagged by section (telos:problems, telos-id:P1); the TELOS.md is compiled on demand, so it stays current. Import restructures into the canonical Mimesis format — your original file is preserved byte-for-byte first.
Import an existing TELOS.md in the app (Imports tab → "TELOS file"), or over HTTP; re-imports update entries in place, and soft-deleted entries stay deleted. Build section by section with the app's TELOS tab, the CLI interview, or let your assistant run the interview over MCP. Export from the app (Download TELOS.md), the API, or the mimesis_telos MCP tool.
# Compiled TELOS.md (agents get only what their scopes allow) $ curl -H "Authorization: Bearer $TOKEN" \ "https://mimesis.ai/api/telos?format=md" # Section-by-section completeness $ curl -H "Authorization: Bearer $TOKEN" \ "https://mimesis.ai/api/telos/coverage" # Agent-driven building over the same interview API $ curl -H "Authorization: Bearer $TOKEN" \ "https://mimesis.ai/api/interview/next?kind=telos" $ curl -X POST -H "Authorization: Bearer $TOKEN" \ -d '{"kind":"telos","question_id":"t_problem_1","answer":"..."}' \ "https://mimesis.ai/api/interview/answer"
MCP tools: mimesis_telos, mimesis_telos_coverage, and mimesis_interview_next/mimesis_interview_answer with kind="telos". Agent-relayed answers enter the review queue as candidates. Sensitive sections (traumas, log, predictions, favorites) are tagged private and are never visible to agents or included in exports unless the owner opts in. Local CLI: telos show | export | add | coverage | import and interview --telos.
Prefer the command line?
Run Mimesis entirely from the CLI, no server required. Commands run from the repo root with PYTHONPATH=src.
$ PYTHONPATH=src python3 -m mimesis.cli --user you init $ PYTHONPATH=src python3 -m mimesis.cli --user you \ context "some prompt" --debug
Hosted beta endpoints live under /api. Running Mimesis yourself instead? The CLI, HTTP server, and MCP server use these same request and response shapes on your own machine.