Agents that remember — without a vector DB.
Per-agent state, persisted between runs. No embeddings to manage, no Pinecone to provision.
Multi-turn agents need state. Most platforms make you plug in Pinecone to get there.
Agents that remember feel magical. But in most platforms, "memory" means bolting on a vector DB, writing embedding pipelines, and praying the retrieval works.
Appstrate agents get typed state out of the box. Last run's output becomes next run's input, via a simple JSON schema. No vectors unless you want them.
State is a JSON object. Persisted. Typed. Yours.
Every run returns state. The next run receives it under ## Previous State in the prompt.
{
"id": "run_cm1abc123def456",
"packageId": "@acme/sales-enrichment",
"status": "success",
"result": {
"summary": "Processed 12 new leads.",
"enriched_count": 12
},
"state": {
"last_sync_at": "2026-04-16T10:42:31Z",
"processed_account_ids": ["acc_94", "acc_95", "acc_96"],
"skipped_count": 3
},
"startedAt": "2026-04-16T10:42:01Z",
"completedAt": "2026-04-16T10:43:12Z",
"duration": 71000
}What makes it work.
Typed state schema
Define the shape. AJV validates on every run.
Run history API
Agents call /run-history to see past outputs when needed.
Per-end-user state
State scopes to your customer, not your org.
Vector DB optional
Plug in Pinecone/Qdrant/pgvector if you need semantic recall.
Ship stateful agents without the stack.
JSON schema in, JSON state out. That's the whole contract.