setup
Provision a vector DB, choose a host, and wire a client into the agent.
Add `resources.memory.tiers: [vector]` to a2a.yaml — one line.
An agent's long-term, semantic memory shouldn't be a vector store you self-host in dev, provision separately in prod, and hope stays in sync. On a2a cloud you declare `resources.memory.tiers: [vector]` once in a2a.yaml — and get a real local Qdrant while you build and a managed Qdrant when you ship. Same engine, both sides, no per-environment wiring.
one declaration · real Qdrant in dev · managed Qdrant in prod
The usual path to agent memory is to stand up a vector database, pick a host, wire a client, and do it again — differently — for production. Dev ends up on a mock or a hand-run container; prod ends up on a separately provisioned service. The two drift, an `if PROD` branch quietly selects a different store than you tested against, and the semantic recall you validated on your laptop isn't the one that runs. Memory becomes infrastructure you babysit per environment instead of a property of the agent.
`resources.memory.tiers: [vector]` in a2a.yaml is the whole request. Locally, `a2a chat` provisions a real Qdrant via Docker Compose with a persistent volume at http://qdrant:6333. In production the same declaration provisions a managed Qdrant. And pgvector rides along on the managed Postgres if you'd rather keep embeddings in SQL.
Add `resources.memory.tiers: [vector]` to a2a.yaml. That single line is the whole request for the agent's long-term, semantic memory. You don't stand up a vector store, pick a host, or wire a client — you declare the resource and the platform provisions it.
Locally, `a2a chat` provisions Qdrant via Docker Compose — qdrant/qdrant:latest with a persistent volume — at http://qdrant:6333. Not a mock, not an in-memory stub: the same Qdrant your agent will hit in production, running on your machine.
The same declaration provisions a managed Qdrant when the agent deploys. Collections, embeddings, and semantic recall behave the way they did on your laptop — because it's the same engine, not a different vector store you swapped in for production.
One line describes the memory in both environments. There's no `if PROD` branch selecting a real vector DB and a fake one for dev, no drift between what you tested and what runs. Parity isn't a discipline you maintain — it's what the declaration gives you.
The managed Postgres you declare under resources.databases ships with pgvector, so embeddings can live alongside relational data and be queried in SQL. Reach for it when memory is a column on your rows; reach for Qdrant when semantic search is the primary store.
The vector store is a declared resource with the same provisioning, scoped grants, and receipts as the rest of the agent — not infrastructure you self-host and babysit per environment. LangGraph, OpenAI Agents SDK, CrewAI, or custom: the memory is there when the agent runs.
Provision a vector DB, choose a host, and wire a client into the agent.
Add `resources.memory.tiers: [vector]` to a2a.yaml — one line.
A mock, an in-memory stub, or a hand-run local container you maintain.
Real Qdrant via `a2a chat` — qdrant/qdrant:latest, persistent volume, :6333.
A separately provisioned, separately configured managed vector service.
The same declaration provisions managed Qdrant — same engine both sides.
Dev and prod drift; `if PROD` picks a different store than you tested.
One line describes memory in both environments — parity by construction.
You self-host and re-wire the vector store for every environment.
Memory is a declared resource: provisioned, scoped, and recorded for you.
Declare it. Add `resources.memory.tiers: [vector]` to your a2a.yaml and the platform provisions the agent's vector memory for you. Locally, `a2a chat` brings up a real Qdrant via Docker Compose; in production the same declaration provisions a managed Qdrant. You don't stand up a vector store or wire a client — the memory is a declared resource, not infrastructure you assemble.
A real Qdrant. `a2a chat` provisions qdrant/qdrant:latest via Docker Compose with a persistent volume, reachable at http://qdrant:6333. It is not a mock or an in-memory shim — it's the same Qdrant engine your agent will hit in production, so semantic recall you build against dev behaves the same once deployed.
Yes — that's the point. The single `resources.memory.tiers: [vector]` declaration provisions Qdrant locally through Docker Compose and a managed Qdrant in production. Collections, embeddings, and semantic queries behave the same on both sides because it's the same engine, not a different vector store swapped in for production. Dev↔prod parity comes from the declaration, not from you keeping two setups in sync.
You can, and both are available. The managed Postgres you declare under resources.databases ships with pgvector, so you can store and query embeddings in SQL alongside your relational rows. Use pgvector when memory is naturally a column on your data; use Qdrant when semantic search is the agent's primary long-term memory store. The primary store on this path is Qdrant — pgvector is there when SQL fits better.
No. Vector memory is a declared platform resource with the same provisioning, scoped grants, and receipts as the rest of the agent — you don't self-host it or re-wire it per environment. LangGraph, OpenAI Agents SDK, CrewAI, or custom Python/TypeScript agents all get the same memory from the same one-line declaration; the platform stands it up in dev and prod.
All guides live in the guides index.
a2a cloud gives any agent vector memory from one line of a2a.yaml: Qdrant locally via `a2a chat` and managed Qdrant in production, with pgvector through managed Postgres. MCP and API surfaces, a frontend, scoped grants, and signed receipts on Agent API, public `/invoke`, and standard MCP `tools/call` executions ship with it.