Core concepts

Agents

An agent owns memory. It is the boundary that decides what a retrieval call can possibly see.

The model

Every fact Recalld stores belongs to exactly one agent. Retrieval never crosses that boundary, so two agents on the same account cannot read each other's memory. If you want isolation between your end users, give each one an agent.

ScopeHoldsShared with
agentEverything written for one agentNothing else
threadOne conversation or session inside an agentOther threads on request, see scope
taskA pool several agents write into and read fromEvery agent using the same task_id

Creating an agent

curl -X POST https://eu.recalld.ai/v1/agents \
  -H "Authorization: Bearer $RECALLD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "support-bot"}'

name is required and is for your benefit only. Nothing in retrieval reads it.

Choosing models

Each agent runs three LLM steps and one embedding model. You can set any of them when you create the agent.

FieldRuns onDoes
llm_models.decomposeIngestionBreaks what you write into facts and plans the lookups for related stored facts
llm_models.evaluateIngestionCompares new facts with stored ones and decides what to add, update, or supersede
llm_models.select_factsRecallPicks the facts that answer the request. Search does not use an LLM
embedding_modelIngestion and retrievalTurns facts and queries into vectors. Cannot be changed after the agent is created
curl -X POST https://eu.recalld.ai/v1/agents \
  -H "Authorization: Bearer $RECALLD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "support-bot",
    "llm_models": {
      "decompose": "openai-gpt-6-luna",
      "evaluate": "openai-gpt-6-luna",
      "select_facts": "openai-gpt-6-luna"
    },
    "embedding_model": "gemini-embedding-002-vertex"
  }'

Each id must be a memory model listed by GET /v1/models for the region. A field you leave out uses your account's default model, set in Settings, and without one, Recalld's default. The LLM steps can be changed later from the agent in the dashboard.

Plan limits

The Free plan runs default models only. Creating an agent with another model is refused with 400. If your plan later changes to Free, an agent set to other models runs on the defaults until you upgrade.

Check which models ran

Responses from the memory routes under /v1/agents/{agent_id}/, such as ingestion, recall, and search, carry an X-Recalld-Models header. It names the models that request ran with, after your account, agent, and plan settings were applied:

X-Recalld-Models: decompose=openai-gpt-6-luna, evaluate=openai-gpt-6-luna, select_facts=openai-gpt-6-luna, embedding=gemini-embedding-002-vertex

When the exact model matters, for example in an evaluation, compare it with what you asked for. Defaults can change, so the header is the record of what ran.

How many agents

Two patterns cover almost everything:

  • One agent per end user. Right when memory is personal and must never leak between people. Use threads inside it for individual sessions.
  • One agent per assistant. Right when memory is about a shared domain, for example a support bot that should accumulate product knowledge across every conversation.

Do not create an agent per conversation. That is what threads are for, and it throws away the cross-session recall that makes memory worth having.

Shared task memory

Passing task_id on ingest and retrieval opts that call into a shared pool. Every agent sending the same task_id reads and writes the same facts, on top of its own private memory. Use it when several agents collaborate on one job and need each other's findings.

Deleting an agent

curl -X DELETE https://eu.recalld.ai/v1/agents/$AGENT_ID \
  -H "Authorization: Bearer $RECALLD_API_KEY"

Deletion removes the memory too

Deleting an agent discards its facts, threads, and sources. There is no undo and no export step built into the call.