Your data, your ops — the same epistemic memory graph, fully self-managed.
Prefer zero-ops? Try hosted →
What you get: a durable FalkorDB graph (multi-writer safe) behind the daemon, the MCP server, and the same 5-question onboarding prompt your agent walks you through. The MCP tool names are identical to hosted — only the transport differs (self-hosted HTTP vs Streamable HTTP).
Clone the repo (Docker is the recommended path — no local Python needed):
git clone https://github.com/daniel-ospina/tortoise.git && cd tortoise
No Docker? pip install tortoise-graph (or pip install -e . from the repo) — Python 3.12+ — and use the embedded path below, which is single-agent eval only.
The repo's docker-compose.yml starts the daemon plus a FalkorDB sidecar (AOF on, named volume, healthcheck) — the durable multi-writer path for teams and production:
docker compose up -d ✔ daemon ready → http://localhost:8000 (MCP at /mcp) ✔ FalkorDB sidecar healthy (127.0.0.1:6379, requirepass)
Set a strong TORTOISE_API_KEY in docker-compose.yml before exposing beyond localhost. Host-side tools can reach the sidecar directly with TORTOISE_DB_URI=docker://:falkordb@localhost:6379/tortoise.
Run tortoise onboard from your repo — it chains init → index → demo → doctor automatically (resolves the same DB target as your daemon):
tortoise onboard Step 1/5: Ensure Tortoise SDK is installed ✅ Tortoise installed Step 2/5: Initialize graph ✅ graph ready Step 3/5: Index repository Found 42 markdown files. Indexing… Step 4/5: First memory demo ✅ demo points created Step 5/5: Health check ✅ doctor OK Onboarding complete. Next: connect your agent (step 4) tortoise setup — configure per-role memory
Idempotent — re-running skips already-done steps. When it finishes, it prints the canonical onboarding prompt URL — paste that into your agent to complete setup.
Docker path (recommended): point your agent at the daemon:
claude mcp add tortoise http://localhost:8000/mcp # or the .mcp.json "type": "http" block
Stdio path (same durable sidecar): if you prefer stdio transport, point the harness at the sidecar (requires the Docker sidecar from step 2 running):
No Docker / single-agent eval: run python -m tortoise.mcp_server with TORTOISE_DB_PATH set — embedded FalkorDBLite is single-writer, eval only; concurrent writers lose data, so one agent only.
Configure how Tortoise filters memory per role:
tortoise setup --role developer # researcher | strategist | developer
Or run tortoise setup interactively — it walks through episodic / epistemic / semantic / procedural / working memory per role.
| You are… | Use… | Why |
|---|---|---|
| One agent, experimenting / laptop eval | Embedded (no Docker, tortoise init) | Zero deps, single-writer only — safe for one agent |
| A team / multiple agents | Docker compose sidecar (step 2) | Durable multi-writer: concurrent agents never lose writes |
| Production / HA | Docker compose or managed Cloud | AOF + backups + ops; embedded is eval only |
Embedded FalkorDBLite is AOF-durable for a single process since #915, but concurrent writers lose data — that is the boundary, and it is not negotiable for team deployments.
tortoise_health, and reports the harness-connected checkpoint. Fetch it at
app.premiselabs.co/skills/tortoise-onboarding/SKILL.md
(the archived onboarding prompt was superseded by this skill, M8) or run
tortoise onboard and copy the URL it prints.