SELF-HOSTED

Tortoise on your own infrastructure

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).

1Install

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.

2Run the daemon (Docker, recommended)

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.

3Onboard (5 steps)

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.

4Connect your agent (MCP)

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.

5Role memory (optional)

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.

6Which path should I use?

You are…Use…Why
One agent, experimenting / laptop evalEmbedded (no Docker, tortoise init)Zero deps, single-writer only — safe for one agent
A team / multiple agentsDocker compose sidecar (step 2)Durable multi-writer: concurrent agents never lose writes
Production / HADocker compose or managed CloudAOF + 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.

Onboarding skill: after setup, install the tortoise-onboarding skill for your agent — it self-adjudicates your harness, connects the MCP server, verifies with 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.
Hosted (zero-ops) → GitHub →