Echo docs

Echo is a memory layer for AI agents on FalkorDB. It links every belief to where it came from and counts independent origins, so repetition stops passing for evidence.

Quickstart

Open the studio. It clones a private FalkorDB graph for you with a prepared scenario. Follow Start here: ask the agent, open the disputed belief, trace its lineage, retract the planted post. Then switch to Your memory to start an empty one and add your own pages.

Connect your agent

Echo is an MCP server (streamable HTTP). Every memory has its own address: add ?workspace=<id> to point an agent at the memory you have open. The studio's Connect button gives you the exact URL and one-click installs.

Claude Codeshell
claude mcp add --transport http echo "https://echo-memory.onrender.com/mcp/?workspace=<memory-id>"
Cursor · ~/.cursor/mcp.jsonjson
{
  "mcpServers": {
    "echo": { "url": "https://echo-memory.onrender.com/mcp/?workspace=<memory-id>" }
  }
}
LangGraphpython
from langchain_mcp_adapters.client import MultiServerMCPClient

client = MultiServerMCPClient({"echo": {"url": "https://echo-memory.onrender.com/mcp/?workspace=<memory-id>", "transport": "streamable_http"}})
tools = await client.get_tools()

Tools: echo_recall, echo_check, echo_ingest, echo_remember, echo_retract, echo_load_bearing, echo_cypher. A good system prompt line: “Before you rely on a remembered claim, call echo_check; only VERIFIED is established. Store findings with echo_remember and the source ids they came from.”

Bring your own model

The agent and claim extraction work with any OpenAI-compatible chat model. The free default is Groq's openai/gpt-oss-120b. In Settings → Model, pick Groq, OpenAI, Anthropic, Google Gemini, OpenRouter, NVIDIA NIM, Together AI or any https endpoint, paste a key, list the provider's models and test the connection.

Keys are stored only in your browser and sent with your own requests as X-Echo-LLM-* headers. The API uses them for that request and keeps nothing; error messages are scrubbed of anything that looks like a key. Custom endpoints must be public https.

the same choice over HTTPshell
curl -N -X POST https://echo-memory.onrender.com/api/w/<memory-id>/ask \
  -H 'content-type: application/json' \
  -H 'x-echo-llm-provider: anthropic' -H 'x-echo-llm-model: claude-sonnet-5-5' \
  -H "x-echo-llm-key: $ANTHROPIC_API_KEY" \
  -d '{"question": "What do I know, and how well is it supported?"}'

Adding sources

Add source takes URLs (several at once, read in order so later copies link back to earlier originals), files (PDF, Markdown, text, HTML) or pasted text. Echo extracts the claims with the model, matches them to beliefs already in memory, and infers lineage against every stored source: links, identifiers, verbatim and paraphrased passages, shared figures, and shared owners or ad and analytics fingerprints.

Trust policy

Each memory decides how many independent origins make a belief verified (default two). Raise it for clinical, legal or security work; lower it to explore. Changing it rescores every belief immediately.

Verdicts

  • Verified: enough independent origins for the policy, and nothing outweighs them.
  • Needs more origins: independent origins agree, but fewer than the policy requires.
  • Single origin: every source traces back to one place.
  • Contested: independent origins disagree.
  • Disputed: independent evidence against outweighs the support.
  • Unsupported: only the agent's own notes support it.
  • Retracted: its origin was retracted.

Memories, export, import

Keep a memory per project. The tab menu next to Your memory lists yours and creates new ones. Settings → This memory renames, exports a portable JSON file (sources, their claims, retractions and the policy) and imports one into a new memory. The hosted demo keeps memories you build for 30 days; export to keep one, or self-host.

HTTP API

shellshell
POST   /api/workspaces                      {"scenario": null}  → new empty memory
POST   /api/workspaces/import               an export file      → new memory
GET    /api/w/{id}                          stats, title, policy
PATCH  /api/w/{id}/settings                 {"title", "min_origins"}
POST   /api/w/{id}/ingest                   {"url"} | {"text", "title"}
POST   /api/w/{id}/ingest-file              {"filename", "data_b64"}
GET    /api/w/{id}/beliefs[/{belief}]       verdicts, origin clusters, proof paths
POST   /api/w/{id}/sources/{src}/retract    {"restore": false}
POST   /api/w/{id}/ask                      {"question", "mode": "echo"|"plain"}  (SSE)
POST   /api/w/{id}/cypher                   read-only Cypher
GET    /api/w/{id}/export · origins · rings · families · graph

Self-host

FalkorDB and the API run in one container. Point the web app at it with NEXT_PUBLIC_API_URL. Source: github.com/Gravyie/echo.

shellshell
git clone https://github.com/Gravyie/echo && cd echo
cp .env.example .env               # GROQ_API_KEY=... (optional; any provider works per request)
docker compose up --build          # FalkorDB :6379 · API :8000
cd web && pnpm install && pnpm dev -p 3100   # studio on :3100